Android中如何安全退出多個(gè)Activity-創(chuàng)新互聯(lián)

這篇文章主要介紹“Android中如何安全退出多個(gè)Activity”,在日常操作中,相信很多人在Android中如何安全退出多個(gè)Activity問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Android中如何安全退出多個(gè)Activity”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

創(chuàng)新互聯(lián)10多年成都企業(yè)網(wǎng)站建設(shè)服務(wù);為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì)及高端網(wǎng)站定制服務(wù),成都企業(yè)網(wǎng)站建設(shè)及推廣,對(duì)人造霧等多個(gè)方面擁有多年的網(wǎng)站制作經(jīng)驗(yàn)的網(wǎng)站建設(shè)公司。

實(shí)現(xiàn)步驟:

1:創(chuàng)建一個(gè)“空”的輔助Activity,在其onCreate方法中調(diào)用finish方法。如下:

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

2:點(diǎn)擊“退出App”的按鈕執(zhí)行以下方法:

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(); } });

通過(guò)這兩個(gè)步驟可以實(shí)現(xiàn)退出整個(gè)應(yīng)用。下面做一個(gè)簡(jiǎn)單地分析:

測(cè)試中使用三個(gè)Activity,其執(zhí)行順序?yàn)镸ainActivity -> SecondActivity -> LastActivity,在SecondActivity中,我們期望點(diǎn)擊“退出app”按鈕來(lái)實(shí)現(xiàn)完全退出App的功能,此時(shí)我們將借助一個(gè)輔助Activity(LastActivity)。

首先在觸發(fā)點(diǎn)擊事件后,在onClick方法中執(zhí)行啟動(dòng)LastActivity操作。在執(zhí)行點(diǎn)擊事件前我們先查看任務(wù)棧中運(yùn)行著的Activity,可以通過(guò)如下的命令查看:

adb shell dumpsys activity

其結(jié)果如下:
此時(shí)我們可以知道MainActivity跟SecondActivity屬于同一個(gè)任務(wù)棧,且啟動(dòng)順序?yàn)镸ainActivity -> SecondActivity。在onClick方法中我們準(zhǔn)備啟動(dòng)LastActivity的時(shí)候,其Flag被設(shè)置為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.”,其表達(dá)的意思為在啟動(dòng)新的Activity的時(shí)候,將清理跟此Activity“相關(guān)”的任務(wù)棧,此時(shí)除了棧中本身的Activity(SecondActivity)都將被清理,然后再啟動(dòng)Activity(LastActivity)。下面來(lái)驗(yàn)證其是否正確,在LastActivity的onCreate調(diào)用finish前加上斷點(diǎn),然后點(diǎn)擊“退出App”按鈕,查看任務(wù)棧的信息如下:
此時(shí)我們可以看出,在LastActivity被啟動(dòng)后,MainActivity被清理了,此時(shí)任務(wù)棧中只剩下LastActivity跟SecondActivity。接著運(yùn)行LastActivity的finish方法,LastActivity退出,然后SecondActivty也退出,此時(shí)就退出App了。

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

<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" />

此時(shí)我們查看任務(wù)棧的情況,如下:
此時(shí)我們可以看見(jiàn)MainActivity跟SecondActivity在不同的任務(wù)棧中,此時(shí)點(diǎn)擊退出App按鈕后,其Activity棧的情況如下:
可以看到此時(shí)三個(gè)Activity都在不同的任務(wù)棧中。細(xì)心的同學(xué)可能已經(jīng)發(fā)現(xiàn)問(wèn)題了,為什么LastActivity已經(jīng)啟動(dòng),而MainActivity還沒(méi)有被銷毀?是的,這里就是上面提到的'清理跟此Activity“相關(guān)”的任務(wù)棧'中“相關(guān)”兩字的特殊意義了,這說(shuō)明在清理Activity時(shí)是有條件的,其條件為“被clean的Activity必須跟需要啟動(dòng)的Activity在同一任務(wù)棧中”。由于現(xiàn)在MainActivity、SecondActivity、LastActivity在不同任務(wù)棧中,因此Activity不會(huì)被清理。執(zhí)行斷點(diǎn)后續(xù)代碼,此時(shí)Activity棧中依然存在MainActivity,導(dǎo)致整個(gè)App是不能完全退出的。

到此,關(guān)于“Android中如何安全退出多個(gè)Activity”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

本文題目:Android中如何安全退出多個(gè)Activity-創(chuàng)新互聯(lián)
當(dāng)前地址:http://muchs.cn/article2/epoic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、全網(wǎng)營(yíng)銷推廣、域名注冊(cè)、網(wǎng)站導(dǎo)航定制開發(fā)、外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)