欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2024-02-22 19:27:29
本文实例讲述了android一次性退出多个activity的方法。分享给大家供大家参考,具体如下: 因为android的api中没有提供一次性退出的接口所以想要在多act...

本文实例讲述了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程序设计有所帮助。