Android崩溃无法自动重启问题

问题描述

在某次项目优化中,更新完配置项后,系统会要求重新启动应用使得最新设置的配置项能够立即生效.重启应用的代码如下所示:

    /**
     * restartApp:重新启动应用.
     * @param activity 上下文
     */
    private void restartApp(Activity activity) {
        Intent intent = new Intent(activity, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
        // 杀掉进程
        android.os.Process.killProcess(android.os.Process.myPid());
        System.exit(0);
    }

需要被重新拉起的MainActivity在mainfests中的声明如下:

        <activity
            android:name="com.keytop.fccc.activity.MainActivity"
            android:launchMode="singleTask"
            android:theme="@style/Theme.AppCompat.Light.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

实际上,调用restartApp方法后,应用并没有被重新拉起.

试验

我将MainActivity中的 android:launchMode="singleTask" 注释掉后,再次试验,发现已经能够正常使用了.

原因分析[android:launchMode="singleTask" 惹的祸?]

Activity四大启动模式之一的singleTask: 当前栈中如果存在特定的Activity(本例为MainActivity).如果再起请求激活MainActivity时,已经存在的MainActivity会被重用.

但是,很明显,我在restartApp方法是已经声明了 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);即新建的MainActivity会在一个全新的栈中生成.因此不应该会存在已有的MainActivity被复用的问题.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容