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

首頁 > 系統 > Android > 正文

Android 關閉多個Activity的實現方法

2019-12-12 01:59:38
字體:
來源:轉載
供稿:網友

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界面  */  

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 深水埗区| 荣昌县| 东平县| 屏东市| 马龙县| 蓬安县| 烟台市| 根河市| 霍山县| 伊宁市| 石家庄市| 大石桥市| 宾川县| 扬州市| 临江市| 监利县| 玛纳斯县| 滕州市| 莎车县| 同江市| 阳原县| 肥西县| 马关县| 乌鲁木齐县| 霍邱县| 清丰县| 清水河县| 绥中县| 当雄县| 柯坪县| 新和县| 蒙城县| 新野县| 雷波县| 乃东县| 湖南省| 衡阳县| 平谷区| 十堰市| 抚顺市| 嘉峪关市|