对于一个应用程序可能有很多个Activity,可能每个人并不想一个个的去关闭Activity,也有可能忘了,那怎么关闭所有的未关闭的Activity呢,其实有很多方法,但是我最喜欢的一种就是通过广播事件去关闭,这样简单易懂,方便操作,很快捷。

首先就是建立一个父类,让所有的activity继承父类,这样就不用每次都去注册广播,只要在父类注册好就行了,代码如下:

  1. package net.loonggg.test;
  2.  
  3. import android.app.Activity;
  4. import android.content.BroadcastReceiver;
  5. import android.content.Context;
  6. import android.content.Intent;
  7. import android.content.IntentFilter;
  8.  
  9. public class BaseActivity extends Activity {
  10. /**
  11. * 关闭Activity的广播,放在自定义的基类中,让其他的Activity继承这个Activity就行
  12. */
  13. protected BroadcastReceiver finishAppReceiver = new BroadcastReceiver() {
  14. @Override
  15. public void onReceive(Context context, Intent intent) {
  16. finish();
  17. }
  18. };
  19.  
  20. @Override
  21. public void onResume() {
  22. super.onResume();
  23. // 在当前的activity中注册广播
  24. IntentFilter filter = new IntentFilter();
  25. filter.addAction("net.loonggg.exitapp");
  26. this.registerReceiver(this.finishAppReceiver, filter);
  27. }
  28.  
  29. @Override
  30. protected void onDestroy() {
  31. super.onDestroy();
  32. this.unregisterReceiver(this.finishAppReceiver);
  33. }
  34. }

其次就是子类继承,代码如下:

  1. package net.loonggg.test;
  2.  
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.view.KeyEvent;
  6. import android.view.View;
  7. import android.widget.Button;
  8. import android.widget.Toast;
  9.  
  10. public class MainActivity extends BaseActivity {
  11. private Button btn;
  12.  
  13. @Override
  14. protected void onCreate(Bundle savedInstanceState) {
  15. super.onCreate(savedInstanceState);
  16. setContentView(R.layout.activity_main);
  17. btn = (Button) findViewById(R.id.btn);
  18.  
  19. btn.setOnClickListener(new View.OnClickListener() {
  20.  
  21. @Override
  22. public void onClick(View v) {
  23. Intent intent = new Intent(getApplicationContext(),
  24. SecondActivity.class);
  25. startActivity(intent);
  26. }
  27. });
  28. }
  29.  
  30. private long exitTime = 0;
  31.  
  32. @Override
  33. public boolean onKeyDown(int keyCode, KeyEvent event) {
  34. if (KeyEvent.KEYCODE_BACK == keyCode) {
  35. // 判断是否在两秒之内连续点击返回键,是则退出,否则不退出
  36. if (System.currentTimeMillis() - exitTime > 2000) {
  37. Toast.makeText(getApplicationContext(), "再按一次退出程序",
  38. Toast.LENGTH_SHORT).show();
  39. // 将系统当前的时间赋值给exitTime
  40. exitTime = System.currentTimeMillis();
  41. } else {
  42. exitApp();
  43. }
  44. return true;
  45. }
  46. return super.onKeyDown(keyCode, event);
  47. }
  48.  
  49. /**
  50. * 退出应用程序的方法,发送退出程序的广播
  51. */
  52. private void exitApp() {
  53. Intent intent = new Intent();
  54. intent.setAction("net.loonggg.exitapp");
  55. this.sendBroadcast(intent);
  56. }
  57.  
  58. @Override
  59. protected void onDestroy() {
  60. super.onDestroy();
  61. System.out.println("-------MainActivity-------->onDestroy()");
  62. }
  63.  
  64. }

其实不用多说,我相信大家代码肯定都看懂了,主要是思路,代码都是非常简单的基础的。那下边我再介绍连续点击两次返回键退出应用程序的方法,方法如下:

  1. /**
  2. * 记录标记时间
  3. */
  4. private long exitTime = 0;
  5.  
  6. @Override
  7. public boolean onKeyDown(int keyCode, KeyEvent event) {
  8. if (KeyEvent.KEYCODE_BACK == keyCode) {
  9. // 判断是否在两秒之内连续点击返回键,是则退出,否则不退出
  10. if (System.currentTimeMillis() - exitTime > 2000) {
  11. Toast.makeText(getApplicationContext(), "再按一次退出程序",
  12. Toast.LENGTH_SHORT).show();
  13. // 将系统当前的时间赋值给exitTime
  14. exitTime = System.currentTimeMillis();
  15. } else {
  16. exitApp();
  17. }
  18. return true;
  19. }
  20. return super.onKeyDown(keyCode, event);
  21. }

到这里就完了!非常简单吧!

通过广播关闭应用程序(每个Activity)和连续点击两次返回键关闭应用程序的更多相关文章

  1. Android 应用按两下返回键退出应用程序

    在android应用开发中,有时候应用会用到按两下返回键退出应用的功能,今天介绍一下这个功能,直接上代码: @Override public boolean dispatchKeyEvent(KeyE ...

  2. vue 手机物理返回键关闭弹框

    1.打开弹窗调用 window.history.pishState() 函数 2.关闭弹框 3.mounted 生命周期 监听popstate 事件 4.beforeDestroy 生命周期 移除po ...

  3. Android中实现两次点击返回键退出本程序

    1,当用户使用我们的app的时候,有时候无意的或者不是有心的按下了我们的返回键,这时候为了更好的用体验,我们需要让用户再一次确定一下,以便判断用户的真实意图 代码如下: //该功能实现退出时提示的功能 ...

  4. vue 弹窗时 监听手机返回键关闭弹窗(页面不跳转)

    [注]:  popstate 事件 a.当活动历史记录条目更改时,将触发popstate事件. b.如果被激活的历史记录条目是通过对history.pushState()的调用创建的,或者受到对his ...

  5. 【Android实验】第一个Android程序与Activity生命周期

    目录 第一个Android程序和Activity生命周期 实验目的 实验要求 实验过程 1. 程序正常启动与关闭 2. 外来电话接入的情况 3. 外来短信接入的情况 4. 程序运行中切换到其他程序(比 ...

  6. Android——点击对话框上按钮不关闭对话框

    有时候我没可能需要在点击按钮进行一些检测,但是并不想关闭次对话框(系统默认点击任何一个按钮则关闭对话框),处理方法如下:在点击事件下添加如下代码: try { Field field = dialog ...

  7. Activity详解一 配置、启动和关闭activity

    先看效果图: Android为我们提供了四种应组件,分别为Activity.Service.Broadcast receivers和Content providers,这些组建也就是我们开发一个And ...

  8. 我的Android 4 学习系列之创建应用程序和Activity:Manifest、Application、Activity

    目录 介绍Android应用程序组件,以及使用这些组件构建的各种Android应用程序 Android应用程序的生命周期 如何创建应用程序Manifest 如何使用外部资源提供对位置.语言和硬件配置的 ...

  9. Android跨进程通信访问其他应用程序的Activity

    访问其他应用程序的ActivityActivity既可以在进程内(同一个应用程序)访问,也可以跨进程访问.如果想在同一个应用程序中访问Activity,需要指定Context对象和Activity的C ...

随机推荐

  1. IOS http协议 总结

    HTTP协议1.面试题常见:聊一下HTTP协议(协议的完整的通信过程) ============================================================ 一.一 ...

  2. UESTC 1246 拆x3

    用归纳法分析可以知道死循环只有4. 分析一下复杂度,如果n很大并且不是素数,根据基本不等式可以知道 sum factor(n) ≥ 2+n/2 ≍ n/2. 复杂度是O(T*logN*sqrt(N)) ...

  3. 复杂链表的复制 -python编写

    题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用,否 ...

  4. Fluent经典问题答疑

    原文链接1 原文链接28 什么叫边界条件?有何物理意义?它与初始条件有什么关系? 边界条件与初始条件是控制方程有确定解的前提. 边界条件是在求解区域的边界上所求解的变量或其导数随时间和地点的变化规律. ...

  5. AngularJS 控制器其他实例

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  6. C#继承简介与规则

    一.C#继承简介 1. 类的层次结构 下面是一个类的层次结构图: 上图反映了鱼类的派生关系,其中最高层的实体往往具有最一般最普遍的特征,越下层的实体就越具体,并且下层包含了上层的特征.如果将上层的实体 ...

  7. UVa新汉诺塔问题(A Different Task,Uva 10795)

    主要需要理递归函数计算 #define MAXN 60+10 #include<iostream> using namespace std; int n,k,S[MAXN],F[MAXN] ...

  8. JS中常犯错误

    01.==与=== 释: 在JavaScript中使用三等号来判断两个条件是否相等.使用等于关系运算符时,只有两边的条件相等时,结果才为真,否则就是假.注意等于关系运算符并不只是判断 数字类型的数据, ...

  9. 你们知道SEO每天都在做什么吗?

    医院也有做SEO的,专门负责医院网站优化工作,那么医院的SEO每天都做什么呢?偶然见到一篇文章,转载来分享给大家.感觉写的很实在. 大凡做seo工作的人都知道seo工作者每天都要做大量的外链,像有些个 ...

  10. python实现简单关联规则Apriori算法

    from itertools import combinations from copy import deepcopy # 导入数据,并剔除支持度计数小于min_support的1项集 def lo ...