Android一次性退出多個(gè)Activity的方法
本文實(shí)例講述了Android一次性退出多個(gè)Activity的方法。分享給大家供大家參考,具體如下:
因?yàn)閍ndroid的API中沒有提供一次性退出的接口所以想要在多activity的程序里面一次性退出的話就要費(fèi)點(diǎn)功夫了。我是在一個(gè)單例對(duì)象里面記錄activity棧中activity的引用然后在需要退出時(shí)遍歷一遍finish()掉就可以了。實(shí)現(xiàn)步驟如下:
1、創(chuàng)建一個(gè)單例對(duì)象
package com.exit; import java.lang.ref.SoftReference; import java.util.HashMap; import java.util.Iterator; import java.util.Map.Entry; import android.app.Activity; import android.content.Context; import android.content.Intent; public class ActivityManager { private Context context; private static ActivityManager activityManager; public static ActivityManager getActivityManager(Context context) { if(activityManager == null) { activityManager = new ActivityManager(context); } return activityManager; } private ActivityManager(Context context) { this.context = context; } /** * task map,用于記錄activity棧,方便退出程序(這里為了不影響系統(tǒng)回收activity,所以用軟引用) */ private final HashMap<String, SoftReference<Activity>> taskMap = new HashMap<String, SoftReference<Activity>>(); /** * 往應(yīng)用task map加入activity */ public final void putActivity(Activity atv) { taskMap.put(atv.toString(), new SoftReference<Activity>(atv)); } /** * 往應(yīng)用task map加入activity */ public final void removeActivity(Activity atv) { taskMap.remove(atv.toString()); } /** * 清除應(yīng)用的task棧,如果程序正常運(yùn)行這會(huì)導(dǎo)致應(yīng)用退回到桌面 */ public final void exit() { for (Iterator<Entry<String, SoftReference<Activity>>> iterator = taskMap.entrySet().iterator(); iterator.hasNext();) { SoftReference<Activity> activityReference = iterator.next().getValue(); Activity activity = activityReference.get(); if (activity != null) { activity.finish(); } } taskMap.clear(); } }
2、創(chuàng)建自己的根activity,重寫onCreate與onDestory
package com.exit; import android.app.Activity; import android.os.Bundle; public class BaseActivity extends Activity { private ActivityManager manager = ActivityManager.getActivityManager(this); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); manager.putActivity(this); } @Override protected void onDestroy() { super.onDestroy(); manager.removeActivity(this); } public void exit(){ manager.exit(); } }
3、以后創(chuàng)建的activity都繼承這個(gè)根activity就可以了,如下
package com.exit.activitys; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import com.exit.BaseActivity; import com.exit.R; public class ExitActivity extends BaseActivity implements OnClickListener{ private Button start; private Button exit; private TextView tipTV; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); start = (Button)findViewById(R.id.start_new_activity); exit = (Button)findViewById(R.id.exit_all_activity); tipTV = (TextView)findViewById(R.id.tip_tv); tipTV.setText("activity:"+this.toString()); start.setOnClickListener(this); exit.setOnClickListener(this); } @Override public void onClick(View v) { if(v == start){ Intent intent = new Intent(this , ExitActivity.class); startActivity(intent); }else if(v == exit){ exit(); } } }
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android開發(fā)入門與進(jìn)階教程》、《Android多媒體操作技巧匯總(音頻,視頻,錄音等)》、《Android基本組件用法總結(jié)》、《Android視圖View技巧總結(jié)》、《Android布局layout技巧總結(jié)》及《Android控件用法總結(jié)》
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
- Android使用Theme自定義Activity進(jìn)入退出動(dòng)畫的方法
- Android仿微信滑動(dòng)退出Activity
- Android 中 退出多個(gè)activity的經(jīng)典方法
- 退出Android程序時(shí)清除所有activity的實(shí)現(xiàn)方法
- android中實(shí)現(xiàn)完全退出程序方法(退出所有activity)
- Android Activity進(jìn)出動(dòng)畫三種方法
- Android Activity切換動(dòng)畫詳解及實(shí)例
- Android Activity跳轉(zhuǎn)動(dòng)畫效果
- Android實(shí)現(xiàn)Activity界面切換添加動(dòng)畫特效的方法
- Android的Activity跳轉(zhuǎn)動(dòng)畫各種效果整理
- Android編程設(shè)定activity進(jìn)入和退出效果的方法
相關(guān)文章
Android 應(yīng)用指定瀏覽器開發(fā)實(shí)例
這篇文章主要介紹了Android 應(yīng)用指定瀏覽器開發(fā)實(shí)例的相關(guān)資料,需要的朋友可以參考下2016-10-10Android中ListView的item點(diǎn)擊沒有反應(yīng)的解決方法
這篇文章主要介紹了Android中ListView的item點(diǎn)擊沒有反應(yīng)的相關(guān)資料,需要的朋友可以參考下2017-10-10探討:android項(xiàng)目開發(fā) 統(tǒng)籌兼顧 需要考慮的因素
本篇文章是對(duì)基于android項(xiàng)目開發(fā) 統(tǒng)籌兼顧 需要考慮的因素進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06Android開發(fā)之Android.mk模板的實(shí)例詳解
這篇文章主要介紹了Android開發(fā)之Android.mk模板的實(shí)例詳解的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下2017-10-10Android獲取常用輔助方法(獲取屏幕高度、寬度、密度、通知欄高度、截圖)
我們需要獲取Android手機(jī)或Pad的屏幕的物理尺寸,以便于界面的設(shè)計(jì)或是其他功能的實(shí)現(xiàn)。下面就分享一下Android中常用的一些輔助方法2016-02-02超簡(jiǎn)單的幾行代碼搞定Android底部導(dǎo)航欄功能
這篇文章主要介紹了超簡(jiǎn)單的幾行代碼搞定Android底部導(dǎo)航欄功能,需要的朋友可以參考下2018-03-03Android 7.0 手電筒控制實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了Android 7.0 手電筒控制實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09