您好,登錄后才能下訂單哦!
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中怎么關閉多個Activity問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。