У меня давняя проблема с приложением, и я не смог ее решить.Мое приложение состоит из нескольких действий, которые вызывают друг друга с помощью StartActivityForResult.Затем они ждут ответа и действуют соответственно.Это нормально работает в нормальных условиях.У меня есть следующий набор в манифесте:
android:alwaysRetainTaskState = "true"
Когда ОС Android решает прекратить действие в моем приложении, оно, похоже, хочет уничтожить действие root.Я вижу запись в журнале, подобную этой:
no longer want com.ddhsoftware.android.handbase
Похоже, что на этом этапе закрывает корневую активность, а также приложение и службу, которые у меня запущены.приложение, запустив его снова (или выбрав из нажатия и удерживая кнопку домой), я получаю сообщение о принудительном выходе.Журналы читают это:
02-24 17:29:04.376 E/AndroidRuntime(14318): FATAL EXCEPTION: main
02-24 17:29:04.376 E/AndroidRuntime(14318): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ddhsoftware.android.handbase/com.ddhsoftware.android.handbase.ListViewScreen}: java.lang.NullPointerException
02-24 17:29:04.376 E/AndroidRuntime(14318): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
02-24 17:29:04.376 E/AndroidRuntime(14318): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
02-24 17:29:04.376 E/AndroidRuntime(14318): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
02-24 17:29:04.376 E/AndroidRuntime(14318): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
02-24 17:29:04.376 E/AndroidRuntime(14318): at android.os.Handler.dispatchMessage(Handler.java:99)
02-24 17:29:04.376 E/AndroidRuntime(14318): at android.os.Looper.loop(Looper.java:130)
02-24 17:29:04.376 E/AndroidRuntime(14318): at android.app.ActivityThread.main(ActivityThread.java:3683)
02-24 17:29:04.376 E/AndroidRuntime(14318): at java.lang.reflect.Method.invokeNative(Native Method)
02-24 17:29:04.376 E/AndroidRuntime(14318): at java.lang.reflect.Method.invoke(Method.java:507)
02-24 17:29:04.376 E/AndroidRuntime(14318): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
02-24 17:29:04.376 E/AndroidRuntime(14318): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
02-24 17:29:04.376 E/AndroidRuntime(14318): at dalvik.system.NativeStart.main(Native Method)
02-24 17:29:04.376 E/AndroidRuntime(14318): Caused by: java.lang.NullPointerException
02-24 17:29:04.376 E/AndroidRuntime(14318): at java.util.Arrays$ArrayList. (Arrays.java:47)
02-24 17:29:04.376 E/AndroidRuntime(14318): at java.util.Arrays.asList(Arrays.java:169)
02-24 17:29:04.376 E/AndroidRuntime(14318): at android.widget.ArrayAdapter. (ArrayAdapter.java:125)
02-24 17:29:04.376 E/AndroidRuntime(14318): at com.ddhsoftware.android.handbase.ListViewScreen.setupViewSelector(ListViewScreen.java:821)
02-24 17:29:04.376 E/AndroidRuntime(14318): at com.ddhsoftware.android.handbase.ListViewScreen.onCreate(ListViewScreen.java:114)
02-24 17:29:04.376 E/AndroidRuntime(14318): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-24 17:29:04.376 E/AndroidRuntime(14318): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
02-24 17:29:04.376 E/AndroidRuntime(14318): ... 11 more
02-24 17:29:04.386 W/ActivityManager( 96): Force finishing activity com.ddhsoftware.android.handbase/.ListViewScreen
Проблема заключается в том, что это подэтап из корневого и последний видимый.Он больше не действителен, так как он генерирует адаптер массива из базы данных, которая открыта в корневом действии, и, поскольку она только что была перезапущена, на данный момент база данных не открыта.Хотя я сохраняю базы данных и записи в OnSaveInstanceState, чтобы ничего не потеряно, я не могу повторно открыть базы данных и восстановить их положение, поскольку базы данных используют шифрование, а ключи никогда не сохраняются и не кэшируются по соображениям безопасности.В этом случае я просто хочу вернуться к корневому действию.
Я хотел бы знать, есть ли способ полностью перезапустить мое приложение, когда оно перезапускается после уничтожения, и не пытаться восстановить какие-либо действия.Я знаю, что есть режимы запуска, которые я могу установить, чтобы всегда возвращаться в корень, если пользователь выключается и обратно, но это не вариант в этом случае.Я просто хочу, чтобы приложение было полностью убито, когда уничтожена корневая активность!
Заранее благодарим за любые советы.