如果我的应用崩溃(原因不重要-可能是硬件问题,内存不足等),Android总是在上一次活动时启动我的应用。前往办公室进行约会的人们使用该应用程序。当客户到达时,接待会使用该客户的代码解锁应用程序,然后客户继续进行几次活动。因此,除了初始解锁屏幕外,应用程序中所有活动都需要有客户端上下文。因此,如果应用因任何原因崩溃,则该应用需要返回到开始屏幕,但Android始终返回到上一个活动。
看来这确实很容易做到,但是Android“有帮助地”重新启动了上一次使用的活动,如果没有客户端上下文,该活动将无法进行。与其编写一堆代码来检测应用程序在崩溃后是否已重新启动,我不希望它每次都返回到主要活动中。我看过clearTaskOnLaunch和launchMode清单选项,但是它们在崩溃后似乎不起作用。我在每个线程上都有一个UncaughtExceptionHandler,但是某些崩溃(例如,在本机代码中)只是在不调用应用程序的情况下终止了该应用程序。
是的,我可以捆绑客户端状态并在崩溃后将其还原,但是我不想序列化潜在的敏感信息,这听起来像操作系统一样,因为它听起来很基础,所以似乎只支持它。
好吧,现在等待有人告诉我我错过的一些非常明显的解决方案...
谢谢。
最明显的(笑)
把android:clearTaskOnLaunch="true"
你的mainifest:
<activity android:name=".StartActivity"
android:clearTaskOnLaunch="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
savedInstanceState()
当操作系统和其他事物强制终止活动时使用,即:
发生这种情况时,onSaveInstanceState(Bundle outstate)
将被调用,并由您的应用决定是否要添加要保存的状态数据outstate
。
仅当应用程序处于活动状态时,数据才会保存在内存中,换句话说,当应用程序正常关闭时,该数据会丢失。
不太明显的东西(蛮力方法[unsubtle])
崩溃后,检查所有可能崩溃的活动的方法上的savedInstanceState
对象onCreate
,如果不是null
(表示由android系统重新启动),则结束活动(也许重新启动? )。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState != null) {
finish();
}
}
注意活动也会在配置更改(例如,轮换)中重新启动,因此,如果您使用自动轮换,则需要重新启动或为其编写代码(不太难)。
先进的东西
用UncaughtExceptionHandler()
在每一个Android Java线程和原生ExceptionHandler()
如果您使用本机(也许用JNI回调到Java)的代码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句