Android崩潰無(wú)法自動(dòng)重啟問(wèn)題

問(wèn)題描述

在某次項(xiàng)目?jī)?yōu)化中,更新完配置項(xiàng)后,系統(tǒng)會(huì)要求重新啟動(dòng)應(yīng)用使得最新設(shè)置的配置項(xiàng)能夠立即生效.重啟應(yīng)用的代碼如下所示:

    /**
     * restartApp:重新啟動(dòng)應(yīng)用.
     * @param activity 上下文
     */
    private void restartApp(Activity activity) {
        Intent intent = new Intent(activity, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
        // 殺掉進(jìn)程
        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>

實(shí)際上,調(diào)用restartApp方法后,應(yīng)用并沒(méi)有被重新拉起.

試驗(yàn)

我將MainActivity中的 android:launchMode="singleTask" 注釋掉后,再次試驗(yàn),發(fā)現(xiàn)已經(jīng)能夠正常使用了.

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

Activity四大啟動(dòng)模式之一的singleTask: 當(dāng)前棧中如果存在特定的Activity(本例為MainActivity).如果再起請(qǐng)求激活MainActivity時(shí),已經(jīng)存在的MainActivity會(huì)被重用.

但是,很明顯,我在restartApp方法是已經(jīng)聲明了 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);即新建的MainActivity會(huì)在一個(gè)全新的棧中生成.因此不應(yīng)該會(huì)存在已有的MainActivity被復(fù)用的問(wèn)題.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容