2016-07-08 8 views
2

다음과 같은 구조의 애플리케이션을 구축 중입니다.백그라운드에서 죽은 앱을 다시 시작하면 이상하게 작동합니다.

MainActivity -> Fragment1 
      -> Fragment2 -> Fragment3 

여기 Fragment1은 FrameLayout의 MainActivity에서 호스팅됩니다. 사용자가 Fragment1에서 임의의 옵션을 클릭하면 ViewPager에서 Fragment3를 호스트하는 Fragment2로 전환합니다.

문제는 사용자가 앱을 닫지 않고 Android 홈으로 이동하고 Android가 앱을 죽이고 사용자가 최근 앱 목록에서 앱을 다시 시작하려고하면 Fragment3에 빈 화면이 표시된다는 것입니다. 여기

내가

public void requestChangeFragment(Fragment newFragment,String tag,Fragment oldFragment, int anim_in, int anim_out){ 
     if(isStopped()){ 
      return; 
     } 
     mFragmentManager = getSupportFragmentManager(); 
     android.support.v4.app.FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction(); 
     fragmentTransaction.setCustomAnimations(anim_in,anim_out,anim_in,anim_out); 
     fragmentTransaction.add(R.id.main_frame_layout, newFragment, tag); 
     Log.i("FragMngr","Animations set in "+anim_in+" out "+anim_out); 
     fragmentTransaction.addToBackStack(tag); 
     int count = mFragmentManager.getBackStackEntryCount(); 
     String log=""; 
     fragmentTransaction.commit(); 
     for(int i=0;i<count;i++){ 
      android.support.v4.app.FragmentManager.BackStackEntry backStackEntry = mFragmentManager.getBackStackEntryAt(i); 
      log += "count "+i+" name "+backStackEntry.getName()+"\n"; 
     } 
     Log.d("FragMngr","BackStack trace after adding is\n "+log); 
     if(oldFragment!=null) { 
      if(oldFragment.isResumed()) { 
       oldFragment.onPause(); 
      } 
     } 
     topFragment = newFragment; 
    } 

requestChangeFragment()MainActivity에서 구현 interface의 도움으로 조각을 실행라고 조각 트랜잭션을 위해 사용하고있는 방법이다.

+0

코드를 추가로 게시 할 수 있습니까? onResume 및 onPause 메서드와 비슷합니다. – user6547359

+0

기본적으로 로그를 제외한 메소드에는 아무 것도 없습니다. 이러한 조각에서 Crashlytics를 사용하려고 할 때에도 충돌이 발생합니다. (Crashlytics가 초기화되지 않았습니다.) Crashlytics를 초기화하려고하면 컨텍스트를 표시 할 수 없습니다. null 일 수 없습니다. –

+0

아마도 수명주기를 잘 관리하지 못했을 것입니다. 여기에 좋은 튜토리얼을 읽어 보길 원합니다. https://www.raywenderlich.com/117838/introduction-to-android-fragments-tutorial – user6547359

답변

0

몇 가지 조사를 한 후에 앱을 사용하지 않을 때 안드로이드 가비지 컬렉터가 앱을 죽일 때마다 조각의 현재 상태를 저장하는 저장된 인스턴스로 문제를 확인했습니다. 그래서 죽은 응용 프로그램을 다시 시작하려고하면 응용 프로그램을 일시 중지하기 전에 선택한 조각을 이동합니다. 그러나 조각에는 Main 클래스에서받은 데이터가 없습니다.

해결책 : onCreate 메소드에서 MainActivity에 저장된 인스턴스를 지우십시오. 또는 저장된 인스턴스 상태에 값을 저장하는 경우 저장된 인스턴스 상태와 관련된 작업을 수행하고 값을 지운 다음 super.onCreate(savedInstanceState)