成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android如何安全退出多個Activity

移動開發 Android
在做Android App的時候,幾乎每個App都有一個“退出應用”的功能,如何做到完全退出一個App呢?Google了一些文章,都是都是通過List緩存Activity,在需要退出app的時候,迭代activity列表并調用finish方法,這種方案可以達到完全退出App的功能,但是潛在的問題很大,由于Activity被緩存導致不能被釋放,容易導致OOM,因此這種方式需要慎用。

在做Android App的時候,幾乎每個App都有一個“退出應用”的功能,如何做到完全退出一個App呢?Google了一些文章,都是都是通過List緩存Activity,在需要退出app的時候,迭代activity列表并調用finish方法,這種方案可以達到完全退出App的功能,但是潛在的問題很大,由于Activity被緩存導致不能被釋放,容易導致OOM,因此這種方式需要慎用。

下面介紹一種解決方案,利用Activity啟動時的flag屬性來解決此問題,其性能優于通過緩存Activity來完全退出App的方案,只是這種解決方案需要滿足一些條件(見分析過程)。

實現步驟:

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

 

  1. public class LastActivity extends Activity { 
  2.  
  3. @Override 
  4. protected void onCreate(Bundle savedInstanceState) { 
  5. super.onCreate(savedInstanceState); 
  6. finish(); 

 

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

 

  1. findViewById(R.id.quit).setOnClickListener(new OnClickListener() { 
  2.  
  3. @Override 
  4. public void onClick(View v) { 
  5. Intent intent = new Intent(SecondActivity.this,LastActivity.class); 
  6. intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
  7. intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
  8. SecondActivity.this.startActivity(intent); 
  9. finish(); 
  10. }); 

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

測試中使用三個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中做如下設置,使其位于不同的任務棧中:

 

  1. <activity 
  2. android:name=".SecondActivity" 
  3. android:launchMode="singleTask" 
  4. android:taskAffinity="com.umeng.social" 
  5. /> 
  6. <activity 
  7. android:name=".LastActivity" 
  8. android:launchMode="singleTask" 
  9. android:taskAffinity="com.umeng.social.test" 
  10. /> 

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

因此采用設置falg的方式完全退出App是有條件的,條件為:”整個App的Activity存在同一個任務棧中“或者任務棧模型滿足以下條件:
目前對于擁有多個任務棧的情況完全退出App的情況暫時沒有想到比較***的解決方案,如果有小伙伴知道,請記得留言,謝謝。

責任編輯:chenqingxiang 來源: bingobinbin的專欄
相關推薦

2013-02-01 13:47:47

Android開發Activity

2012-02-17 17:07:30

Android安全Activity劫持

2020-08-26 07:47:03

Node腳本鏡像

2013-03-26 11:35:15

設置Activity進

2015-11-09 14:28:06

Adroid安全

2015-11-09 14:37:45

Android安全

2015-11-09 14:17:51

2013-01-08 13:33:07

Android開發Activity入門指南

2010-07-13 09:08:27

Widget開發

2015-10-20 15:54:16

android源碼滑動關閉

2010-02-06 10:14:36

Android Act

2024-04-24 11:09:12

Android圖標

2011-06-02 11:13:10

Android Activity

2011-04-12 17:16:52

Activity跳轉開發實例Android學習筆記

2014-08-08 10:36:12

ActivityAndroid

2010-01-25 17:21:34

Android Act

2014-05-27 15:36:01

AndroidActivity啟動模式

2014-08-21 11:07:40

AndroidActivity銷毀

2011-05-31 09:23:58

Android Activity

2010-01-15 12:22:22

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久草在线中文888 | 在线不卡视频 | 国产特级毛片 | 欧美日韩视频 | 欧美在线观看一区 | 精品无码久久久久久久动漫 | 五月综合色啪 | 可以免费观看的av | 欧美午夜精品久久久久免费视 | 日韩成人中文字幕 | 丁香婷婷在线视频 | 中文字幕一区二区三区四区 | 91在线精品秘密一区二区 | 亚洲一区视频在线播放 | 日韩欧美在线观看视频 | av在线播放网 | 狠狠色狠狠色综合系列 | 狠狠婷婷综合久久久久久妖精 | 免费一区二区三区 | 日韩在线一区视频 | 国产精品久久久久久久久久免费看 | 免费黄色a视频 | 国产91黄色 | 天天插天天操 | 婷婷五月色综合 | 在线欧美a | 尤物在线视频 | 成人av一区 | 欧美成人一区二区三区 | 欧美在线一区二区三区 | 国产在线一区二区 | 亚洲免费三区 | 狠狠干美女 | 欧美二区在线 | 欧美日韩精品中文字幕 | 在线一区二区观看 | www.久久 | 精品欧美一区免费观看α√ | 国产人成精品一区二区三 | 国产欧美一级二级三级在线视频 | 日韩中文字幕 |