首页 > 系统 > Android > 正文

Android一次性退出多个Activity的方法

2020-04-11 10:45:11
字体:
来源:转载
供稿:网友

本文实例讲述了Android一次性退出多个Activity的方法。分享给大家供大家参考,具体如下:

因为android的API中没有提供一次性退出的接口所以想要在多activity的程序里面一次性退出的话就要费点功夫了。我是在一个单例对象里面记录activity栈中activity的引用然后在需要退出时遍历一遍finish()掉就可以了。实现步骤如下:

1、创建一个单例对象

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栈,方便退出程序(这里为了不影响系统回收activity,所以用软引用)   */  private final HashMap<String, SoftReference<Activity>> taskMap = new HashMap<String, SoftReference<Activity>>();  /**   * 往应用task map加入activity   */  public final void putActivity(Activity atv)  {    taskMap.put(atv.toString(), new SoftReference<Activity>(atv));  }  /**   * 往应用task map加入activity   */  public final void removeActivity(Activity atv) {    taskMap.remove(atv.toString());  }  /**   * 清除应用的task栈,如果程序正常运行这会导致应用退回到桌面   */  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、创建自己的根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、以后创建的activity都继承这个根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();    }  }}

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android多媒体操作技巧汇总(音频,视频,录音等)》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结

希望本文所述对大家Android程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表