我如何确保我的Android应用程序始终在主要活动上启动,即使它崩溃了?

格雷格·泰勒(Greg Taylor)

如果我的应用崩溃(原因不重要-可能是硬件问题,内存不足等),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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当我在活动上放置按钮时,Android应用程序崩溃,空活动正常运行

当我打开游戏活动时,我的应用程序不断崩溃。我试图创建一个从主要活动打开的游戏活动

从 Android 应用程序 A,如何在应用程序 B 中打开非主要活动?

启动应用程序时如何显示意图而不是主要活动

我点击跟踪应用程序后将其关闭,但仍在后台运行,我希望它保留在“主要活动”中

在我的基本计算器应用程序上的主要活动中出现错误

Android-扩展应用程序或运行主要活动

Android找不到应用程序的主要活动

如何从非主要活动退出 Kotlin 应用程序

如何在Android上从另一个应用程序启动一个应用程序的主要活动

如何在android studio中创建没有主要活动的应用程序?

即使清单具有主要活动,Android 中也缺少应用程序图标和名称

如何在Android的主要活动上点击图片

Android如何从我的主要活动中调用片段

应用程序重新启动,从背景,而不是恢复以前的状态的主要活动

启动器和主要活动(在Java Swing应用程序中)

开始主要活动时应用崩溃

如何从主要活动中按退键退出应用程序?

如何在应用程序的ImageView(主要活动)中从Web加载图像?

即使我完成了该应用程序,它仍会返回到先前的活动

当我启动应用程序时,WordPress Android 应用程序崩溃

当我的 Android 应用程序的启动画面打开时,应用程序崩溃

使用我在Android上的应用程序中的数据启动应用程序特定活动

为什么在新活动中启动相机意图时我的应用程序不断崩溃?

如何使我的phonegap android应用程序崩溃?

我的 android 应用程序不断崩溃

我如何将customView连接到主要活动

Android:主要活动上的“电话返回”按钮

即使在应用程序重新启动后,如何始终选中复选框,直到用户在 android 中取消选中它?