Как предотвратить уничтожение фрагмента (например, Alertdialog From) при смене языка устройства или в состоянии возобновAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Гость
 Как предотвратить уничтожение фрагмента (например, Alertdialog From) при смене языка устройства или в состоянии возобнов

Сообщение Гость »


В моем приложении произошел сбой, когда я изменил язык устройства, из-за ошибки двух частей в logcat. Аналогичное сообщение: приложение вылетает, когда пользователь меняет язык устройства, а мое приложение вылетает, когда на моем телефоне установлен персидский или арабский язык из-за Double.parseDouble

android.view.WindowLeaked: в активности com.myapp.MainActivity произошла утечка данных из окна DecorView@f97fb0a[MainActivity] это изначально было добавлено сюда в android.view.ViewRootImpl.(ViewRootImpl.java:733) в android.view.ViewRootImpl.(ViewRootImpl.java:717) в android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:399) в android.view.WindowManagerImpl.addView(WindowManagerImpl.java:109) в android.app.Dialog.show(Dialog.java:340) на com.myapp.dialog.showDialog(DialogCenter.java:190) в androidx.fragment.app.Fragment.performViewCreated(Fragment.java:3147) в androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:588) в androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:272) в androidx.fragment.app.FragmentManager.executeOpsTogether (FragmentManager.java:1943) в androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1845) в androidx.fragment.app.FragmentManager.execPendingActions (FragmentManager.java:1782) в androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:565) в android.os.Handler.handleCallback(Handler.java:938) в android.os.Handler.dispatchMessage(Handler.java:99) в android.os.Looper.loop(Looper.java:223) в android.app.ActivityThread.main(ActivityThread.java:7656) в java.lang.reflect.Method.invoke (собственный метод) на com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) на com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) Завершение работы виртуальной машины com.myappFATAL ИСКЛЮЧЕНИЕ: основное com.myappProcess: com.myapp, PID: 8843 com.myappjava.lang.RuntimeException: невозможно начать действие ComponentInfo{com.myapp/com.myapp.MainActivity}: android.view.InflateException: строка двоичного XML-файла № 59 в com.myapp:layout/main_activity: строка двоичного XML-файла № 59 в com.myapp:layout/main_activity: ошибка при раздувании фрагмента класса. com.myappat android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449) com.myappat android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) com.myappat android.app.ActivityThread.handleRelaunchActivityInner(ActivityThread.java:5456) com.myappat android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:5362) com.myappat android.app.servertransaction.ActivityRelaunchItem.execute(ActivityRelaunchItem.java:69) com.myappat android.app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor.java:135) com.myappat android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:95) com.myappat android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) com.myappat android.os.Handler.dispatchMessage(Handler.java:106) com.myappat android.os.Looper.loop(Looper.java:223) com.myappat android.app.ActivityThread.main(ActivityThread.java:7656) com.myappat java.lang.reflect.Method.invoke (собственный метод) com.myappat com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) com.myappat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) com.myappВызвано: android.view.InflateException: строка двоичного файла XML № 59 в com.myapp:layout/main_activity: строка двоичного файла XML № 59 в com.myapp:layout/main_activity: ошибка при раздувании фрагмента класса com.myappВызвано: android.view.InflateException: строка двоичного файла XML № 59 в com.myapp:layout/main_activity: ошибка при раздувании фрагмента класса com.myappВызвано: java.lang.NullPointerException: Попытка вызвать виртуальный метод void com.google.android.material.floatingactionbutton.FloatingActionButton.setBackgroundTintList(android.content.res.ColorStateList) по нулевой ссылке на объект. com.myappat com.myapp.LocationFragment.onViewCreated(LocationSelectionFragment.java:143) com.myappat androidx.fragment.app.Fragment.performViewCreated(Fragment.java:3147) com.myappat androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:588) com.myappat androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:272) com.myappat androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:114) com.myappat androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1455) com.myappat androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3034) com.myappat androidx.fragment.app.FragmentManager.dispatchViewCreated (FragmentManager.java:2945) com.myappat androidx.fragment.app.Fragment.performViewCreated(Fragment.java:3148) com.myappat androidx.fragment.app.FragmentStateManager.ensureInflatedView(FragmentStateManager.java:410) com.myappat androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:271) com.myappat androidx.fragment.app.FragmentLayoutInflaterFactory.onCreateView(FragmentLayoutInflaterFactory.java:142) com.myappat androidx.fragment.app.FragmentController.onCreateView(FragmentController.java:136) com.myappat androidx.fragment.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:247) com.myappat androidx.fragment.app.FragmentActivity.onCreateView(FragmentActivity.java:226) com.myappat android.view.LayoutInflater.tryCreateView(LayoutInflater.java:1067) com.myappat android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:995) com.myappat android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:959) com.myappat android.view.LayoutInflater.rInflate(LayoutInflater.java:1121) com.myappat android.view.LayoutInflater.rInflateChildren (LayoutInflater.java:1082) com.myappat android.view.LayoutInflater.rInflate(LayoutInflater.java:1124) com.myappat android.view.LayoutInflater.rInflateChildren (LayoutInflater.java:1082) com.myappat android.view.LayoutInflater.inflate(LayoutInflater.java:680) com.myappat android.view.LayoutInflater.inflate(LayoutInflater.java:532) com.myappat android.view.LayoutInflater.inflate(LayoutInflater.java:479) com.myappat androidx.appcompat.app.AppCompatDelegateImpl.setContentView (AppCompatDelegateImpl.java:775) com.myappat androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:197) com.myappat com.myapp.MainActivity.onCreate(MainActivity.java:115) com.myappat android.app.Activity.performCreate(Activity.java:7994) com.myappat android.app.Activity.performCreate(Activity.java:7978) com.myappat android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309) com.myappat android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422) com.myappat android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) com.myappat android.app.ActivityThread.handleRelaunchActivityInner(ActivityThread.java:5456) com.myappat android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:5362) com.myappat android.app.servertransaction.ActivityRelaunchItem.execute(ActivityRelaunchItem.java:69) com.myappat android.app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor.java:135) com.myappat android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:95) com.myappat android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) com.myappat android.os.Handler.dispatchMessage(Handler.java:106) com.myappat android.os.Looper.loop(Looper.java:223) com.myappat android.app.ActivityThread.main(ActivityThread.java:7656) com.myappat java.lang.reflect.Method.invoke (собственный метод) com.myappat com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) com.myappat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) AppsFilter system_process I взаимодействие: PackageSetting{46efb40 com.myapp/10154} -> PackageSetting{74eaa79 com.android.vending/10099} ЗАБЛОКИРОВАНО ActivityTaskManager system_process W Принудительное завершение активности com.myapp/.MainActivity Обработка com.myapp I Отправка сигнала. ВЫИГРАТЬ СМЕРТЬ: Окно {bff4098 u0 com.myapp/com.myapp.MainActivity} Я пробовал этот ТЕСТ в двух других приложениях.
[*]
В приложении Telegram, когда я открываю страницу, содержащую диалоговое окно предупреждения, приостанавливаю приложение, затем меняю язык устройства, но возвращаясь в приложение, диалоговое окно предупреждения закрывается. Telegram закрывает все всплывающие диалоги в любом состоянии паузы.
[*]
Я проверил это поведение в другом приложении. В этом приложении диалоговое окно остается открытым в состоянии простой паузы, но когда я приостанавливаю приложение, меняю язык устройства и возвращаюсь в приложение, диалоговое окно исчезает.
[*]
Я протестировал это поведение для «диалога разрешений Android». Удивительно, но он остается открытым без каких-либо сбоев или ошибок приложения.

ВОПРОС: Как решить эту проблему?

Я думаю, мне следует что-то сделать в методах onPause() и onResume(). (обратите внимание, что во фрагменте много диалоговых окон оповещений.)

Можно ли добиться надежного поведения «диалога разрешений Android»?

Я думаю, что одним из кандидатов по причине вышеуказанной проблемы является следующий:

ГЛАВНЫЙ ВОПРОС: Во всех моих фрагментах режим возобновления запускает какое-то действие во фрагменте. Повторное открытие диалогового окна оповещений, запуск макета обновления, нажатие некоторых кнопок и т. д. Почему это происходит и как предотвратить такое плохое поведение?
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»