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被復用的問題.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容