0

새 스레드에서 작업을 시작할 때 엔트리 전환 애니메이션이 작동하지 않습니다.새 스레드에서 애니메이션 입력이 작동하지 않는 이유는 무엇입니까?

new Thread(new Runnable() { 
       @Override 
       public void run() { 
        Intent listIntent = new Intent(HomeFragment.this.getActivity(), 
          ListActivity.class); 
        listIntent.putExtra(getString(R.string.type_id), data.get(i).getType_id()); 
        listIntent.putExtra(getString(R.string.translation_title), data.get(i).getTranslate_type()); 
        startActivity(listIntent); 
        getActivity().overridePendingTransition(R.anim.slide_up, R.anim.fade_in); 
       } 
      }).start(); 

그러나 전환 애니메이션은 UI 스레드에서 작동합니다. 애니메이션 입력이 새 스레드에서 작동하지 않는 이유는 무엇입니까?

답변

3

당신은 단순히이 사용

Handler h = new Handler(); 
h.postDelayed(new Runnable() { 

    @Override 
    public void run() { 
     Intent listIntent = new Intent(HomeFragment.this.getActivity(), 
         ListActivity.class); 
     listIntent.putExtra(getString(R.string.type_id), data.get(i).getType_id()); 
     listIntent.putExtra(getString(R.string.translation_title), data.get(i).getTranslate_type()); 
     startActivity(listIntent); 
     getActivity().overridePendingTransition(R.anim.slide_up, R.anim.fade_in); 
    } 
}, 100); 
코딩

해피!

+0

감사합니다. 그것은 작동 중입니다 :) 당신은 왜 이상하게 행동하는지 말해 줄 수 있습니까? – VivekRajendran

+0

귀하의 호출에서 "new Thread"는 (새로운 작업을 시작할 수없는) 기본 스레드가 아닌 새 스레드를 만드는 것으로 간주됩니다. 이 답변에서 해결 된 것처럼 핸들러를 사용하면 호출하는 스레드에서 실행됩니다 UI 스레드) – JiratPasuksmit

0

왜 활동을 생성하기위한 별도의 스레드를 만드나요?

Intent intent = new Intent(getContext(), ListActivity.class); 
startActivity(intent); 
+0

내 UI 스레드가 애니메이션을하고 있습니다. UI 스레드에서 액티비티를 생성 할 때, 애니메이션 janks! 그래서 나는 새로운 실을 갈거야. – VivekRajendran

1

새로운 활동을 시작에 대한 귀하의 호출이 될 수 있습니다 전에 오래된 애니메이션을 일시 정지, 전체 화면을 점령 할 새로운 활동을 시작으로, 전용 UI 스레드에서

그것을 할하시기 바랍니다하는 UI의 일부로 생각입니다 어쨌든 사용자가 애니메이션을 볼 수없는 더 나은 솔루션

+0

답변 해 주셔서 감사합니다. 나는 그것을 구현할 것이다. – VivekRajendran