Android一次性退出多个Activity的方法
本文实例讲述了Android一次性退出多个Activity的方法。分享给大家供大家参考,具体如下:
因为android的API中没有提供一次性退出的接口所以想要在多activity的程序里面一次性退出的话就要费点功夫了。我是在一个单例对象里面记录activity栈中activity的引用然后在需要退出时遍历一遍finish()掉就可以了。实现步骤如下:
1、创建一个单例对象
packagecom.exit; importjava.lang.ref.SoftReference; importjava.util.HashMap; importjava.util.Iterator; importjava.util.Map.Entry; importandroid.app.Activity; importandroid.content.Context; importandroid.content.Intent; publicclassActivityManager { privateContextcontext; privatestaticActivityManageractivityManager; publicstaticActivityManagergetActivityManager(Contextcontext) { if(activityManager==null) { activityManager=newActivityManager(context); } returnactivityManager; } privateActivityManager(Contextcontext) { this.context=context; } /** *taskmap,用于记录activity栈,方便退出程序(这里为了不影响系统回收activity,所以用软引用) */ privatefinalHashMap<String,SoftReference<Activity>>taskMap=newHashMap<String,SoftReference<Activity>>(); /** *往应用taskmap加入activity */ publicfinalvoidputActivity(Activityatv) { taskMap.put(atv.toString(),newSoftReference<Activity>(atv)); } /** *往应用taskmap加入activity */ publicfinalvoidremoveActivity(Activityatv){ taskMap.remove(atv.toString()); } /** *清除应用的task栈,如果程序正常运行这会导致应用退回到桌面 */ publicfinalvoidexit() { for(Iterator<Entry<String,SoftReference<Activity>>>iterator=taskMap.entrySet().iterator();iterator.hasNext();){ SoftReference<Activity>activityReference=iterator.next().getValue(); Activityactivity=activityReference.get(); if(activity!=null) { activity.finish(); } } taskMap.clear(); } }
2、创建自己的根activity,重写onCreate与onDestory
packagecom.exit; importandroid.app.Activity; importandroid.os.Bundle; publicclassBaseActivityextendsActivity{ privateActivityManagermanager=ActivityManager.getActivityManager(this); @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); manager.putActivity(this); } @Override protectedvoidonDestroy(){ super.onDestroy(); manager.removeActivity(this); } publicvoidexit(){ manager.exit(); } }
3、以后创建的activity都继承这个根activity就可以了,如下
packagecom.exit.activitys; importandroid.content.Intent; importandroid.os.Bundle; importandroid.view.View; importandroid.view.View.OnClickListener; importandroid.widget.Button; importandroid.widget.TextView; importcom.exit.BaseActivity; importcom.exit.R; publicclassExitActivityextendsBaseActivityimplementsOnClickListener{ privateButtonstart; privateButtonexit; privateTextViewtipTV; @Override publicvoidonCreate(BundlesavedInstanceState){ 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 publicvoidonClick(Viewv){ if(v==start){ Intentintent=newIntent(this,ExitActivity.class); startActivity(intent); }elseif(v==exit){ exit(); } } }
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android多媒体操作技巧汇总(音频,视频,录音等)》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。