简单快捷的退出APP应用

看到很多的教程包括官方的api的简单描述,双击返回键退出应用程序还用到比较传统的计时方式,用起来很累,于是我就类了-简单的类了。

主要业务逻辑就是利用Handler.sendEmptyMessageDelayed()延迟发送消息

Source - Code:

packagecom.samego.alic.demo01uicontrols;

importandroid.app.Activity;

importandroid.app.ActivityManager;

importandroid.content.Context;

importjava.util.LinkedList;

/**

*管理所有的activity类的集合

* Created by alic on 16-3-26.

*/

public class ActivityCollector {

//承载activity的容器

public static LinkedList<Activity> activities=new LinkedList<Activity>();

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

public static booleanisExit=false;

/**

*向容器里面添加activity

*@paramactivity

*/

public static void addActivity(Activity activity) {

activities.add(activity);

}

/**

*向容器里面删除activity

*@paramactivity

*/

public static void removeActivity(Activity activity) {

activities.remove(activity);

}

/**

*遍历finish所有的activity

*/

public static void finishAll() {

for(Activity activity : activities) {

if(!activity.isFinishing()) {

activity.finish();

}

}

}

/**

*连后台任务都杀死 杀得一干二净

*退出应用程序

*完全退出App的方法

*/

public static 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) {

}

}

}


就上面的code和我们的需求最一个简单的说明,基本上每一个app打开使用后都有很多的activity界面,

于是上面的类就是用了LinkedList<LinkedList>用来承载每一个activity,然后利用它遍历kill所有的activity

Using-method:

Step-one:

在onCreate()方法体里面补充

ActivityCollector.addActivity(this);

Stept-two

处理双击退出的业务逻辑,这一模块那就直接看代码【的注释】

public booleanonKeyDown(intkeyCode,KeyEvent event) {

//监听返回键点击处理事件

if(keyCode == KeyEvent.KEYCODE_BACK) {

if(!ActivityCollector.isExit) {

ActivityCollector.isExit=true;

Toast.makeText(getApplicationContext(),"再按一次退出程序",Toast.LENGTH_SHORT).show();

//利用handler延迟发送更改状态信息  第一个参数what是信息来源的判断what

myHandler.sendEmptyMessageDelayed(1,2000);

}else{

ActivityCollector.AppExit(this);

}

return false;

}

return super.onKeyDown(keyCode,event);

}

//该处你懂得优化处理

Handler myHandler=new Handler() {

@Override

public voidhandleMessage(Message msg) {

super.handleMessage(msg);

switch(msg.what){

case 0:

ActivityCollector.isExit=false;

break;

}

}

};


已经完事啦,But~But~But~吐槽一下传统的时间处理的方式吧--看!

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);

}

真的完事啦~~


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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏软件开发 -- 分享 互助 成长

WIFI环境下Android手机和电脑通信

前面已经写过一篇java实现最基础的socket网络通信,这篇和之前那篇大同小异,只是将客户端代码移植到手机中,然后获取本机IP的方法略有不同。 先讲一下本篇中...

39650
来自专栏图像识别与深度学习

《Android》Lesson02-第1个Project,Log

196120
来自专栏Android先生

Fragment全解析系列(一):那些年踩过的坑

本篇主要介绍一些最常见的Fragment的坑以及官方Fragment库的那些自身的BUG,并给出解决方案;这些BUG在你深度使用时会遇到,比如F...

35420
来自专栏技术墨客

Spring核心——IOC功能扩展点 原

上一篇文章介绍了非侵入式的框架的概念以及IOC的功能扩展点之一——BeanPostProcessor,我们接下来的内容继续说明IoC更多的扩展方法。

11120
来自专栏Android机动车

Retrofit实现带进度下载

Retrofit是目前最主流的网络框架了,它对网络请求几近完美的封装,大大降低了我们开发者的研发难度,缩短了研发周期。最近项目中遇到了下载视频和图片文件的需求(...

12820
来自专栏猿湿Xoong

Android 8.0 SystemUI(四):二说顶部 StatusBar

大家好,我是ptt,本篇是 SystemUI 的第四篇,也是 StatusBar 的第二说。

1.4K40
来自专栏一个会写诗的程序员的博客

《Kotin 极简教程》第13章 使用 Kotlin 和 Anko 的Android 开发

Anko (https://github.com/Kotlin/anko) 是一个用 Kotlin 写的Android DSL (Domain-Specifi...

31030
来自专栏指尖下的Android

菜鸡的MVP架构漫谈

相信大家在网上看过关于MVP架构的博客数不胜数,至于MVP到底是什么,也不需要我再从百度百科复制一遍了,通俗的说MVP就是解决Model和View的耦合,没有使...

10020
来自专栏世界第一语言是java

Android全能开源项目xUtils3开发教程、简单封装

24440
来自专栏developerHaoz 的安卓之旅

Android Volley 源码解析(三),图片加载的实现

在上一篇文章中,我们一起深入探究了 Volley 的缓存机制,通过源码分析对缓存的工作原理进行了了解,这篇文章将带大家一起探究「Volley 图片加载的实现」,...

10320

扫码关注云+社区

领取腾讯云代金券