中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android中如何安全退出多個Activity

發布時間:2022-04-15 16:28:32 來源:億速云 閱讀:216 作者:iii 欄目:編程語言

這篇文章主要介紹“Android中如何安全退出多個Activity”,在日常操作中,相信很多人在Android中如何安全退出多個Activity問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Android中如何安全退出多個Activity”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

實現步驟:

1:創建一個“空”的輔助Activity,在其onCreate方法中調用finish方法。如下:

public class LastActivity extends Activity {  @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); finish(); } }

2:點擊“退出App”的按鈕執行以下方法:

findViewById(R.id.quit).setOnClickListener(new OnClickListener() {  @Override public void onClick(View v) { Intent intent = new Intent(SecondActivity.this,LastActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); SecondActivity.this.startActivity(intent); finish(); } });

通過這兩個步驟可以實現退出整個應用。下面做一個簡單地分析:

測試中使用三個Activity,其執行順序為MainActivity -> SecondActivity -> LastActivity,在SecondActivity中,我們期望點擊“退出app”按鈕來實現完全退出App的功能,此時我們將借助一個輔助Activity(LastActivity)。

首先在觸發點擊事件后,在onClick方法中執行啟動LastActivity操作。在執行點擊事件前我們先查看任務棧中運行著的Activity,可以通過如下的命令查看:

adb shell dumpsys activity

其結果如下:
此時我們可以知道MainActivity跟SecondActivity屬于同一個任務棧,且啟動順序為MainActivity -> SecondActivity。在onClick方法中我們準備啟動LastActivity的時候,其Flag被設置為Intent.FLAG_ACTIVITY_CLEAR_TASK,該flag在android 文檔中的表述為“If set in an Intent passed to Context.startActivity(), this flag will cause any existing task that would be associated with the activity to be cleared before the activity is started.”,其表達的意思為在啟動新的Activity的時候,將清理跟此Activity“相關”的任務棧,此時除了棧中本身的Activity(SecondActivity)都將被清理,然后再啟動Activity(LastActivity)。下面來驗證其是否正確,在LastActivity的onCreate調用finish前加上斷點,然后點擊“退出App”按鈕,查看任務棧的信息如下:
此時我們可以看出,在LastActivity被啟動后,MainActivity被清理了,此時任務棧中只剩下LastActivity跟SecondActivity。接著運行LastActivity的finish方法,LastActivity退出,然后SecondActivty也退出,此時就退出App了。

上面的方式是所有的Activity都存在同一個任務棧中的情況,對于擁有不同任務棧的不同Activity是否也能真正意義上的完全退出App呢?下面我們將在AndroidManifest.xml文件中對SecondActivity跟LastActivity中做如下設置,使其位于不同的任務棧中:

<activity android:name=".SecondActivity" android:launchMode="singleTask" android:taskAffinity="com.umeng.social" /> <activity android:name=".LastActivity" android:launchMode="singleTask" android:taskAffinity="com.umeng.social.test" />

此時我們查看任務棧的情況,如下:
此時我們可以看見MainActivity跟SecondActivity在不同的任務棧中,此時點擊退出App按鈕后,其Activity棧的情況如下:
可以看到此時三個Activity都在不同的任務棧中。細心的同學可能已經發現問題了,為什么LastActivity已經啟動,而MainActivity還沒有被銷毀?是的,這里就是上面提到的'清理跟此Activity“相關”的任務棧'中“相關”兩字的特殊意義了,這說明在清理Activity時是有條件的,其條件為“被clean的Activity必須跟需要啟動的Activity在同一任務棧中”。由于現在MainActivity、SecondActivity、LastActivity在不同任務棧中,因此Activity不會被清理。執行斷點后續代碼,此時Activity棧中依然存在MainActivity,導致整個App是不能完全退出的。

到此,關于“Android中如何安全退出多個Activity”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

昭通市| 内黄县| 克东县| 柳河县| 丘北县| 康保县| 金昌市| 太保市| 登封市| 江阴市| 金塔县| 囊谦县| 宁陵县| 泰兴市| 昆明市| 龙江县| 尖扎县| 康平县| 宁津县| 贡山| 瑞昌市| 北川| 平湖市| 佛山市| 彭山县| 沙田区| 斗六市| 天津市| 酉阳| 古浪县| 四会市| 泗阳县| 柘荣县| 平山县| 宜川县| 株洲市| 崇阳县| 定远县| 本溪| 清新县| 斗六市|