国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android 關閉多個Activity的實現方法

2019-10-22 18:27:10
字體:
來源:轉載
供稿:網友

Android 關閉多個Activity的實現方法

總的來說有四種方法:

1、使用Application來進行關閉

public class App extends Application {   private static List<Activity> lists = new ArrayList<>();   public static void addActivity(Activity activity) {     lists.add(activity);   }   public static void clearActivity() {     if (lists != null) {       for (Activity activity : lists) {         activity.finish();       }       lists.clear();     }   } } //然后寫一個基類Activity,在構造構造方法調用App.addActivity(this);就可以實現。

2、使用廣播的方式來進行關閉

在基類構造方法中實現注冊廣播,onDestroy方法取消注冊

public class BaseActivity extends AppCompatActivity {   @Override   protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     IntentFilter intentFilter = new IntentFilter();     intentFilter.addAction(getString(R.string.promotion_action));     registerReceiver(receiver, intentFilter);   }   BroadcastReceiver receiver = new BroadcastReceiver() {     @Override     public void onReceive(Context context, Intent intent) {       finish();     }   };   @Override   protected void onDestroy() {     super.onDestroy();     unregisterReceiver(receiver);   } } 

接下來只需要你在想要關閉所有Activity的界面調用

//銷毀所有的Activity //關閉本窗口getActivity().finish();//關閉父窗口if(getActivity().getParent()!= null){  getActivity().getParent().finish();}//關閉列表頁面Intent intent = new Intent();intent.setAction(getString(R.string.promotion_action));getActivity().sendBroadcast(intent);

3、使用onActivityResult遞歸回調的方式關閉

1)在基類Activity重寫onActivityResult方法通過識別ResultCode來調用finish方法

2)接下來只需要在你想要關閉Activity調用setResult(Result_CLOSE)就可以了

public class BaseActivity extends AppCompatActivity {   protected final static int RESULT_CLOSE = 0;   @Override   protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);   }   @Override   protected void onActivityResult(int requestCode, int resultCode, Intent data) {     super.onActivityResult(requestCode, resultCode, data);     if(resultCode == RESULT_CLOSE){       setResult(RESULT_CLOSE);       finish();     }   } } 

4.使用setFalgs的方式來關閉

首先先來介紹一個LaunchMode四種模式:

LaunchMode

1)standard和singleTop是相同的,每次都會創建一個新的Activity實例,區別是singleTop當壓入棧的Activity與任務棧的棧頂Activit相同則不會創建實例(會調用onNewIntent方法)

2)singleInstance和singleTask是相同的,都會保證任務中沒有相同的任務,(當執行的Activity與任務中某個Activity相同則會調用onNewIntent方法),不同點是(singleInstance每次都會創建一個任務棧并將Activity壓入棧中),(singleTask是在一個任務棧中,如果壓入棧的Activity與棧內Activity某個相同則直接將那個Activity移動到棧頂不會創建新的實例)

當然這里并沒有用到這四種模式而是運用的是Intent.FLAG_ACTIVITY_CLEAR_TOP,這種標示基本和singleTop類似不同的是如果壓入棧的Activity在棧內某個Activity相同則將它上面的所有Activity進行出棧操作。

在每次跳轉都加上

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

所以在最后一個Activity后退應用:

@Override public boolean onKeyDown(int keyCode, KeyEvent event) {   if (keyCode == KeyEvent.KEYCODE_BACK) {     //銷毀所有的Activity     Intent intent = new Intent(this,FirstActivity.class);     intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);     startActivity(intent);   }   return super.onKeyDown(keyCode, event); } 

這樣略先復雜,現在來說一下使用flag的另一種方法:

在退出的Activity的前一個Activity跳轉加上

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME); 

就可以了,現在來說一下這幾個什么意思

/*   FLAG_ACTIVITY_CLEAR_TASK 這個標示將在這個活動開始之前清除該棧中所有的任務,將里面的Activity都finish掉   FLAG_ACTIVITY_TASK_ON_HOME 這個flag將造成新任務在home的上面,就是在啟動的Activity點擊back之后就會回到home界面  */  

如有疑問請留言或到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 玉环县| 同心县| 望奎县| 文成县| 永川市| 万载县| 贞丰县| 墨脱县| 庆阳市| 宁陕县| 孝昌县| 洪洞县| 淳化县| 凤台县| 家居| 海林市| 武平县| 镇赉县| 红原县| 依安县| 文安县| 莆田市| 台江县| 青海省| 荔浦县| 保山市| 淮滨县| 龙南县| 孝义市| 资兴市| 镶黄旗| 德庆县| 南城县| 牙克石市| 衡阳市| 保靖县| 崇左市| 克山县| 阿拉善左旗| 达州市| 布尔津县|