一次关闭所有Activity和连续点击两次返回键关闭程序的方法

最近有人问我怎么样一次关闭应用程序里所有的Activity的方法,有人说用队列存储的方式,关闭的时候,一个一个的取出再Finish掉。其实个人认为最好的方法就是通过广播的方式来进行。这样简单易懂,方便操作,很快捷。

方法如下

建立一个父类

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

package net.loonggg.test;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
public class BaseActivity extends Activity {
 /**
  * 关闭Activity的广播,放在自定义的基类中,让其他的Activity继承这个Activity就行
  */
 protected BroadcastReceiver finishAppReceiver = new BroadcastReceiver() {
 @Override
 public void onReceive(Context context, Intent intent) {
 finish();
 }
 };
 @Override
 public void onResume() {
 super.onResume();
 // 在当前的activity中注册广播
 IntentFilter filter = new IntentFilter();
 filter.addAction("net.loonggg.exitapp");
 this.registerReceiver(this.finishAppReceiver, filter);
 }
 @Override
 protected void onDestroy() {
 super.onDestroy();
 this.unregisterReceiver(this.finishAppReceiver);
 }
}

其次就是子类的继承,让每个Activity都去继承BaseActivity。

我相信这种思路大家都能看懂,现在我们再来讲一下连续点击两次返回键退出应用程序的方法。

方法如下


/**
  * 记录标记时间
  */
 private long exitTime = 0;
 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
 if (KeyEvent.KEYCODE_BACK == keyCode) {
 // 判断是否在两秒之内连续点击返回键,是则退出,否则不退出
 if (System.currentTimeMillis() - exitTime > 2000) {
 Toast.makeText(getApplicationContext(), "再按一次退出程序",
 Toast.LENGTH_SHORT).show();
 // 将系统当前的时间赋值给exitTime
 exitTime = System.currentTimeMillis();
 } else {
 exitApp();
 }
 return true;
 }
 return super.onKeyDown(keyCode, event);
 }

发送广播退出程序

下边的这方法就是退出应用程序发送广播的方法:

/** 
     * 退出应用程序的方法,发送退出程序的广播 
     */  
    private void exitApp() {  
        Intent intent = new Intent();  
        intent.setAction("net.loonggg.exitapp");  
        this.sendBroadcast(intent);  
    }  

原文发布于微信公众号 - 非著名程序员(non-famous-coder)

原文发表时间:2015-08-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android干货

安卓开发_数据存储技术_外部存储

33580
来自专栏飞雪无情的博客

Android Intents and Intent Filters(三)

每个data定义一个URI和数据类型(MIME),URI由4个属性来定义,分别是android:scheme,android:host,android:port...

8730
来自专栏流媒体

Android RTMP推流之MediaCodec硬编码一(H.264进行flv封装)

在前面Android平台下使用FFmpeg进行RTMP推流(摄像头推流)的文章中,介绍了如何使用FFmpeg进行H264编码和Rtmp推流。接下来讲分几篇文章来...

93130
来自专栏腾讯大讲堂的专栏

深入浅出 Retrofit,这么牛逼的框架你们还不来看看?

文章来源:腾讯Bugly Android 开发中,从原生的 HttpUrlConnection 到经典的 Apache 的 HttpClient,再到对前面这些...

32950
来自专栏Android 开发学习

data-binding 踩坑记

22140
来自专栏MelonTeam专栏

Viewpager循环滑动的实现

导语 本文讲述实现ViewPager循环滑动效果的两种方案: 方案1: 复写ViewPager或者Adapter,扩展dataList,左右各加1...

23660
来自专栏Fish

Android判断网络状况

啊,调bug的时候发现在没有网络的时候程序会崩,因此决定加个网络判断的。就是这个代码啦~然后到了要用的时候,new一个类对象调用这个方法就可以了。 packag...

23590
来自专栏程序员叨叨叨

【转-干货】Retrofit2.0使用总结及注意事项

随着Google对HttpClient 摒弃,和Volley的逐渐没落,OkHttp开始异军突起,而Retrofit则对okHttp进行了强制依赖。Retrof...

98820
来自专栏向治洪

Volley解析之表单提交篇

要实现表单的提交,就要知道表单提交的数据格式是怎么样,这里我从某知名网站抓了一条数据,先来分析别人提交表单的数据格式。  数据包: Connection: ...

23350
来自专栏向治洪

系统捕获异常并发送到服务器

大家都知道,现在安装Android系统的手机版本和设备千差万别,在模拟器上运行良好的程序安装到某款手机上说不定就出现崩溃的现象,开发者个人不可能购买所有设备逐个...

21070

扫码关注云+社区

领取腾讯云代金券