2016-07-15 15 views
0

Я разрабатываю приложение для Android и сталкиваюсь с какой-то странной проблемой. в то время как приложение находится в фоновом режиме и пользователь меняет язык телефона и перезапускает приложение из фона, а затем принудительно останавливает приложение.Приложение Сбой после смены языка телефона и перезапуск с фона

Странно, что приложение падает только при изменении языка с английского на французский, но при изменении с французского на английский или на каком-либо другом языке он будет работать без сбоев. Ниже журнал регистрации ошибок -

процесса: com.myapp, ПИД: 17745 java.lang.IllegalStateException: активность была разрушена на android.support.v4.app.FragmentManagerImpl.enqueueAction (FragmentManager.java:1515) на android.support.v4.app.BackStackRecord.commitInternal (BackStackRecord.java:638) на android.support.v4.app.BackStackRecord.commitAllowingStateLoss (BackStackRecord.java:621) на android.support.v4.app .FragmentStatePagerAdapter.finishUpdate (FragmentStatePagerAdapter.java:162) на android.support.v4.view.ViewPager.populate (ViewPager.j ava: 1177) на android.support.v4.view.ViewPager.populate (ViewPager.java:1025) на android.support.v4.view.ViewPager.onMeasure (ViewPager.java:1545) на android.view. View.measure (View.java:18794) на android.widget.RelativeLayout.measureChildHorizontal (RelativeLayout.java:715) на android.widget.RelativeLayout.onMeasure (RelativeLayout.java:461) на android.view.View. (View.java:18794) на android.widget.RelativeLayout.measureChildHorizontal (RelativeLayout.java:715) на android.widget.RelativeLayout.onMeasure (RelativeLayout.java:461) на android.view.View.measure (Посмотреть .java: 18794) на android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5951) в android.widget.LinearLayout.measureChildBeforeLayout (LinearLayout.java:1465) в android.widget.LinearLayout.measureVertical (LinearLayout.java : 748) на android.widget.LinearLayout.onMeasure (LinearLayout.java:630) на android.view.View.measure (View.java:18794) на android.support.v4.widget.DrawerLayout.onMeasure (DrawerLayout .java: 1075) на android.view.View.measure (View.java:18794) на android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5951) на android.widget.FrameLayout.o nMeasure (FrameLayout.java:194) на android.support.v7.widget.ContentFrameLayout.onMeasure (ContentFrameLayout.java:135) на android.view.View.measure (View.java:18794) на android.view. ViewGroup.measureChildWithMargins (ViewGroup.java:5951) на android.widget.LinearLayout.measureChildBeforeLayout (LinearLayout.java:1465) на android.widget.LinearLayout.measureVertical (LinearLayout.java:748) на android.widget.LinearLayout. onMeasure (LinearLayout.java:630) на android.view.View.measure (View.java:18794) на android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5951) at android.widget.FrameLayout.onMeasure (FrameLayout.java:194) на android.view.View.measure (View.java:18794) на android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5951) на android. widget.LinearLayout.measureChildBeforeLayout (LinearLayout.java:1465) на android.widget.LinearLayout.measureVertical (LinearLayout.java:748) на android.widget.LinearLayout.onMeasure (LinearLayout.java:630) в android.view.View.measure (View.java:18794) на android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5951) на android.widget.FrameLayout.onMeasure (FrameLayout.java:194) на com.android.internal.policy.PhoneWindow $ DecorView.onMeasure (PhoneWindow.java:2643) на android.view.View.measure (View.java:18794) на android.view.ViewRootImpl.performMeasure (ViewRootImpl.java:2100) at и roid.view.ViewRootImpl.measureHierarchy (ViewRootImpl.java:1216) на android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:1452) на android.view.ViewRootImpl.doTraversal (ViewRootImpl.java:1107) на андроид. view.ViewRootImpl $ TraversalRunnable.run (ViewRootImpl.java:6013) на android.view.Choreographer $ CallbackRecord.run (Хореограф.java:858) на android.view.Choreographer.doCallbacks (Хореограф.java:670) at android.view.Choreographer.doFrame (Хореограф.ява: 606) на android.view.Choreographer $ FrameDisplayEventReceiver.run (Хореограф.java:844) на android.os.Handler.handleCallback (Handler.java:739) на android.os.Handler.dispatchMessage (Handler.java:95) на android.os.Looper.loop (Looper.java:148) на android.app.ActivityThread.main (ActivityThread.java:5417) at java.lang.reflect.Method.invoke (собственный метод) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main (ZygoteInit .java: 616)

ответ

0

Это кажется ошибка, которая появилась от поддержки функций, добавленных для вложенных фрагментов.

В основном, FragmentManager заканчивается сломанным внутренним состоянием, когда он отделен от действия.

Попробуйте это на фрагмент:

@Override 
public void onDetach() { 
    super.onDetach(); 
    try { 
     Field childFragmentManager = Fragment.class.getDeclaredField("mChildFragmentManager"); 
     childFragmentManager.setAccessible(true); 
     childFragmentManager.set(this, null); 

    } catch (NoSuchFieldException e | IllegalAccessException e) { 
     throw new RuntimeException(e); 
    } 
} 

Позвольте мне знать, если он работает.

С уважением,

0

Это происходит потому, что при смене языка устройства новые экземпляры фрагментов создали, и приложение пытается найти новые экземпляры.

Вам необходимо сохранить экземпляр ваших фрагментов в списке, чтобы избежать исключения этого типа.

Если вы предоставите свой код, где будут добавлены фрагменты, то это будет более ясно.

 Смежные вопросы

  • Нет связанных вопросов^_^