Android 中 退出多個(gè)activity的經(jīng)典方法
1.使用List集合方式
用list保存activity實(shí)例,然后逐一干掉
import java.util.LinkedList; import java.util.List; import android.app.Activity; import android.app.AlertDialog; import android.app.Application; import android.content.DialogInterface; import android.content.Intent; public class SysApplication extends Application { private List<Activity> mList = new LinkedList<Activity>(); private static SysApplication instance; private SysApplication() { } public synchronized static SysApplication getInstance() { if (null == instance) { instance = new SysApplication(); } return instance; } // add Activity public void addActivity(Activity activity) { mList.add(activity); } public void exit() { try { for (Activity activity : mList) { if (activity != null) activity.finish(); } } catch (Exception e) { e.printStackTrace(); } finally { // System.exit(0);//去掉這個(gè) } } @Override public void onLowMemory() { super.onLowMemory(); System.gc(); } }
在每個(gè)Activity的onCreate方法中添加類似代碼:
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SysApplication.getInstance().addActivity(this); }
在需要退出程序的時(shí)候,調(diào)用:
SysApplication.getInstance().exit();
簡(jiǎn)而言之,通過(guò)單例模式把每個(gè)Activity 的引用添加到一個(gè)全局鏈表中,每次退出程序調(diào)用System.exit(0)時(shí),先調(diào)用鏈表中Activity 的finish方法
優(yōu)點(diǎn):實(shí)現(xiàn)簡(jiǎn)單,邏輯清晰
2.使用廣播
推薦!!好方便?。?br />
基本邏輯就是:定義一個(gè)BaseActivity,在這個(gè)Activity中綁定廣播,在廣播的onReceive方法中調(diào)用finish();然后以后的Activity都繼承這個(gè)Activity,退出時(shí)發(fā)送廣播,退出BaseActivity,父activity都退出了,子activity肯定退出。
代碼如下:
import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.support.v7.app.AppCompatActivity; public class BaseActivity extends AppCompatActivity { protected BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { finish(); } }; @Override public void onResume() { super.onResume(); // 在當(dāng)前的activity中注冊(cè)廣播 IntentFilter filter = new IntentFilter(); filter.addAction("ExitApp"); this.registerReceiver(this.broadcastReceiver, filter); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); //解除綁定 this.unregisterReceiver(this.broadcastReceiver); } }
一個(gè)Activity實(shí)例:
import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.KeyEvent; import android.view.View; import android.widget.Button; import android.widget.Toast; public class ActivityC extends BaseActivity { Button btn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_activity_c); SysApplication.getInstance().addActivity(this); btn = (Button) findViewById(R.id.acticityc_btn); //關(guān)閉所有的activity btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { } }); } /** * 捕獲手機(jī)物理菜單鍵 */ private long exitTime = 0; @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK){//&& event.getAction() == KeyEvent.ACTION_DOWN if((System.currentTimeMillis()-exitTime) > 2000){ Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show(); exitTime = System.currentTimeMillis(); } else { myExit(); } return true; } return super.onKeyDown(keyCode, event); } protected void myExit() { //第二種退出方法 // SysApplication.getInstance().exit(); Intent intent = new Intent(); intent.setAction("ExitApp"); this.sendBroadcast(intent); //super.finish(); } @Override protected void onStop() { super.onStop(); Log.i("tag","ActivityC-onStop"); } @Override protected void onDestroy() { super.onDestroy(); Log.i("tag","ActivityC-onDestroy"); } }
就是在退出的地方調(diào)用這個(gè):
private long exitTime = 0; @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK){//&& event.getAction() == KeyEvent.ACTION_DOWN if((System.currentTimeMillis()-exitTime) > 2000){ Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show(); exitTime = System.currentTimeMillis(); } else { myExit(); } return true; } return super.onKeyDown(keyCode, event); } protected void myExit() { //第二種退出方法 // SysApplication.getInstance().exit(); Intent intent = new Intent(); intent.setAction("ExitApp"); this.sendBroadcast(intent); //super.finish(); }
優(yōu)點(diǎn):方便,方便??!只需要在退出的地方發(fā)送廣播就可以?。?br />
這是我的退出時(shí)的輸出:
08-09 15:33:48.869 26919-26919/example.com.closeapp I/tag: MainActivity-onPause 08-09 15:33:49.279 26919-26919/example.com.closeapp I/tag: MainActivity-onStop 08-09 15:33:51.569 26919-26959/example.com.closeapp D/OpenGLRenderer: endAllStagingAnimators on 0x55850598b0 (RippleDrawable) with handle 0x5585041510 08-09 15:33:56.079 26919-26919/example.com.closeapp I/tag: MainActivity-onDestroy 08-09 15:33:56.089 26919-26919/example.com.closeapp I/tag: ActivityB-onDestroy 08-09 15:33:56.399 26919-26919/example.com.closeapp I/tag: ActivityC-onDestroy
以上所述是小編給大家介紹的Android 中 退出多個(gè)activity的經(jīng)典方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- Android使用Theme自定義Activity進(jìn)入退出動(dòng)畫(huà)的方法
- Android仿微信滑動(dòng)退出Activity
- 退出Android程序時(shí)清除所有activity的實(shí)現(xiàn)方法
- Android一次性退出多個(gè)Activity的方法
- android中實(shí)現(xiàn)完全退出程序方法(退出所有activity)
- Android Activity進(jìn)出動(dòng)畫(huà)三種方法
- Android Activity切換動(dòng)畫(huà)詳解及實(shí)例
- Android Activity跳轉(zhuǎn)動(dòng)畫(huà)效果
- Android實(shí)現(xiàn)Activity界面切換添加動(dòng)畫(huà)特效的方法
- Android的Activity跳轉(zhuǎn)動(dòng)畫(huà)各種效果整理
- Android編程設(shè)定activity進(jìn)入和退出效果的方法
相關(guān)文章
Android實(shí)現(xiàn)橫豎屏切換的實(shí)例代碼
本篇文章主要介紹了Android實(shí)現(xiàn)橫豎屏切換的實(shí)例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06Android開(kāi)發(fā)Compose框架使用開(kāi)篇
這篇文章主要為大家介紹了Android開(kāi)發(fā)Compose框架使用開(kāi)篇,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09Android實(shí)現(xiàn)底部導(dǎo)航欄的主界面
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)底部導(dǎo)航欄的主界面 ,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09Android中RecyclerView拖拽、側(cè)刪功能的實(shí)現(xiàn)代碼
這篇文章主要介紹了Android中RecyclerView拖拽、側(cè)刪功能的實(shí)現(xiàn)代碼,需要的朋友可以參考下2017-09-09android studio集成ijkplayer的示例代碼
本篇文章主要介紹了android studio集成ijkplayer的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09Android實(shí)現(xiàn)滑動(dòng)刻度尺效果
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)滑動(dòng)刻度尺效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06Android仿Iphone屏幕底部彈出半透明PopupWindow效果
這篇文章主要為大家詳細(xì)介紹了Android仿Iphone屏幕底部彈出半透明PopupWindow效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07Android自定義實(shí)現(xiàn)淘寶下拉刷新效果
這篇文章主要為大家詳細(xì)介紹了Android自定義實(shí)現(xiàn)淘寶下拉刷新效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12詳解Android性能優(yōu)化之啟動(dòng)優(yōu)化
一款應(yīng)用的第一印象很重要,第一印象往往決定了用戶的去留。打開(kāi)一款應(yīng)用,如果速度很快,很順暢,那么很容易讓人覺(jué)得這款應(yīng)用背后的技術(shù)實(shí)力很強(qiáng),用戶潛意識(shí)中會(huì)對(duì)這款應(yīng)用更加的信賴。本文將詳細(xì)介紹Android性能優(yōu)化之啟動(dòng)優(yōu)化。2021-06-06