关闭所有活动


有时我们可能会打开了很多个Activity,如果需要在某个页面可以关掉所有的Activity并退出程序。下面提供一个关闭所有Activity的方法, 就是用一个list集合来存储所有Activity

1.创建一个ActivityCollector作为Activity管理器,代码如下:

public class ActivityCollector {    public static List activities = new ArrayList<>();    //添加一个新活动    public static void addActivity(Activity activity) {        activities.add(activity);    }    //移除一个活动    public static void removeActivity(Activity activity) {        activities.remove(activity);    }    //关闭所有活动    public static void finishAll() {        for (Activity activity : activities) {            if (!activity.isFinishing()) {                activity.finish();            }        }    }}

2.在BaseActivity中添加代码如下:

public class BaseActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        ActivityCollector.addActivity(this);//创建一个新活动时加入活动管理器    }    //重写onDestroy()从活动管理器中移除被关闭的活动    @Override    protected void onDestroy() {        super.onDestroy();        ActivityCollector.removeActivity(this);    }}

可以在任意一个活动中调用ActivityCollector.finishAll()方法来关闭所有活动

完全退出程序


上面说的是关闭所有Activity的,但是有时候可能要退出整个App,连后台任务都清理得一干二净的话,可以使用搭配着下述代码使用:

public void AppExit(Context context) {      try {          ActivityCollector.finishAll();          ActivityManager activityMgr = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);          activityMgr.killBackgroundProcesses(context.getPackageName());          System.exit(0);      } catch (Exception ignored) {}  }  

双击退出程序的两种方法


定义一个变量,来标识是否退出

// 定义一个变量,来标识是否退出private static boolean isExit = false;Handler mHandler = new Handler() {    @Override    public void handleMessage(Message msg) {        super.handleMessage(msg);        isExit = false;    }};public boolean onKeyDown(int keyCode, KeyEvent event) {    if (keyCode == KeyEvent.KEYCODE_BACK) {        if (!isExit) {            isExit = true;            Toast.makeText(getApplicationContext(), "再按一次退出程序",                    Toast.LENGTH_SHORT).show();            // 利用handler延迟发送更改状态信息            mHandler.sendEmptyMessageDelayed(0, 2000);        } else {            exit(this);        }        return false;    }return super.onKeyDown(keyCode, event);}

保存点击时间

//保存点击的时间private long exitTime = 0;public boolean onKeyDown(int keyCode, KeyEvent event) {    if (keyCode == KeyEvent.KEYCODE_BACK) {        if ((System.currentTimeMillis() - exitTime) > 2000) {            Toast.makeText(getApplicationContext(), "再按一次退出程序",                    Toast.LENGTH_SHORT).show();            exitTime = System.currentTimeMillis();        } else {                        exit();                      }        return false;    }        return super.onKeyDown(keyCode, event);}

更多相关文章

  1. Android之对话框Dialog
  2. android 关闭进程
  3. Android(安卓)退出整个程序代码
  4. 退出Dialog时,Activity的生命周期运行情况
  5. android亮屏、黑屏、解锁事件的系统广播接收
  6. Android退出程序问题综述
  7. android中activity栈详解
  8. android 输入法框梳理
  9. android点击返回键退出应用的实现

随机推荐

  1. sql server建库、建表、建约束技巧
  2. sql server 2000 数据库自动备份设置方法
  3. sql server创建临时表的两种写法和删除临
  4. 如何优化SQL语句(全)
  5. sql server 2000中禁止创建表(权限设置方
  6. 为什么我们需要在SQL Server里更新锁
  7. 简单介绍SQL Server里的闩锁
  8. 简单介绍SQL Server中的自旋锁
  9. sqlserver数据库优化解析(图文剖析)
  10. 自增长键列统计信息的处理方法