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程序设计有所帮助。