Android中用户要退出应用程序,看到大部分退出应用程序的做法是:弹出一个对话框,用户点了确定后退出。个人觉得这用户体验有点不好,手指还要往屏幕中间移动再点击。用户按了一次后退键,这可能用户是误按了后退键,并不想直接退出程序,给用户提示”再按一次后退键退出应用程序“,如果用户真想退出,直接再按一次后退键即可退出整个应用程序。
网上有好多实现方法,看到大部分人博客转的方法如下:
private static Boolean isExit = false;
private static Boolean hasTask = false;
Timer tExit = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
isExit = false;
hasTask = true;
}
};
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if(isExit == false ) {
isExit = true;
Toast.makeText(this, "再按一次后退键退出应用程序", Toast.LENGTH_SHORT).show();
if(!hasTask) {
tExit.schedule(task, 2000);
}
} else {
finish();
System.exit(0);
}
}
return false;
}
看这逻辑,测试了下,如果用户第一次按了后退键,等2s再按一次后退键,再等2s再按一次后退键,第三次就直接退出了。看来这段代码只能实现用户第一次按后退键,2s之内再按后退键退出程序的功能而已。
我把它改了下:
private static Boolean isExit = false;
Timer tExit = new Timer();
MyTimerTask task;
class MyTimerTask extends TimerTask{
@Override
public void run() {
isExit = false;
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if(isExit == false ) {
isExit = true;
Toast.makeText(this, "再按一次后退键退出应用程序", Toast.LENGTH_SHORT).show();
if(task!=null)
task.cancel(); //将原任务从队列中移除
task = new MyTimerTask();// 新建一个任务
tExit.schedule(task, 2000);
} else {
finish();
System.exit(0);
}
}
return false;
}
以上经常测试,功能正常。
还有一种简便方法:
private long exitTime = 0;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK
&& event.getAction() == KeyEvent.ACTION_DOWN){
if((System.currentTimeMillis()-exitTime) > 2000){
Toast.makeText(getApplicationContext(), "再按一次后退键退出程序", Toast.LENGTH_SHORT).show();
exitTime = System.currentTimeMillis();
} else {
//退出代码
}
return true;
}
return super.onKeyDown(keyCode, event);
}
分享到:
相关推荐
android退出应用程序会调用android.os.Process.killProcess(android.os.Process.myPid())或是System.exit(0),这只是针对第一个Activity(也就是入口的Activity)时生效。如果有A,B,C三个Activity,而想在B或C中...
此DEMO实现了现在许多软件中都使用 双击返回按钮退出当前应用 的这么一种比较流行的效果 当然目前这种写法并不是唯一 希望大家多多交流 注:此DEMO可以直接拿来用。没有问题。
通过Android应用开发的开放实验学生可以熟悉Android应用程序开发的工 " "具、开发语言和开发方法,为今后深入学习甚至进行实际App开发做好技术上的" "准备。 " "2.开放实验项目的任务与要求: " "学生理解Android...
使用流行且高效的Android Studio 3工具套件构建Android应用程序,该套件工具是开发人员使用Java API进行Android开发的集成开发环境(IDE)。通过本书,您将了解Android工具生态系统中最新、最有成效的工具,从而确保...
DTLive是一款功能强大的Android应用程序,允许用户访问大量娱乐内容,包括电影,电视剧,直播电视频道,OTT服务等等。支持Android。 该应用程序具有用户友好的界面,可以轻松导航和发现新内容。用户可以浏览不同类别...
CiyaShop Android应用程序配置了最流行的主题,如木材市场,扁平的一些,Xstore,Avada,Enfold,Electro,波尔图,CiyaShop,和40多个Woo-commerce主题。不仅是主题,但它也适用于不同的支付网关,如贝宝,RazarPay...
android提供一个开放的开发环境,为针对移动设备编写创新应用程序带来了激动人心的新机遇。作为使用androidsdk构建这些应用程序的实用指南书籍,《android高级编程》从始至终穿插了一系列示例项目,每个项目都引入...
随着智能手机的普及, Android 操作系统的应用程序市场需求愈来愈大, 因此 Android 应用开发成为当前最热门的开发之一。本文将介绍 Android 应用开发实战所需的工具,技术、流程、框架和库。 一、Android 开发...
Android操作系统是由Google公司开发的开源手机操作系统,由于其源代码开放,任何人都可以免费使用,因而成为目前最流行、最热门的嵌入式操作系统之一。它由应用层、应用框架层、系统运行库层、Lmug内核层四部分组成...
在目前流行的Windows操作系统中,设备驱动程序是操纵硬件的最底层软件接口。它向上提供与硬件无关的用户接口,向...本文介绍了5种设备驱动程序通知应用程序的方法,其中前3种方法主要用于VxD中,后2种方法主要用于WDM。
Android 应用程序中一项流行的技术是链接到 Google 地图,以便在应用程序中显示地址。Android 软件栈还提供对基于位置的服务(例如 GPS)和加速计的支持,不过并不是所有的 Android 设备都配备了必需的硬件。另外...
你的电台应用程序(单站)是你的电台应用程序的单站版本,用于从Android智能手机收听您的在线广播流,使用Material Design设计,使这个应用程序看起来漂亮,用户友好。在Android平台下运行,这是世界上最流行的操作...
在技术理论的讲解方面,《Android应用开发完全自学手册:核心技术、传感器、2D/3D、多媒体与典型案例》注重对实际动手能力和完全自学的指导,书中重点讲解了Android开发的核心知识及流行的应用技术,如游戏开发、2D...
首先你需要判断手机中有没有安装地图应用,在这里提供一个方法: 判断手机是否安装某一应用 上述的packagename是你要检测的应用的包名,怎么查看包名请自行百度哈! 判断好之后,我们可以定义,当有地图应用的时候...
Android-ReboundDemo, 一个 Android 应用 展示了Facebook图书馆的反弹 rebounddemoAndroid演示程序展示了你可以利用Facebook创建的反弹 spring 动画库 。反弹库使用 spring 模型创建动画,这可以为你的应用程序增加...
一个应用程序框架可以将它集成到任何.NET/C#应用程序中让.NET开发更简单,更通用,更流行。这个应用程序框架是一个强大的工具,它为开发人员提供了一系列的功能和库,以便更轻松地构建和管理.NET应用程序。首先,这...
针对Android平台应用软件安全问题,提出了一种基于多特征协作决策的Android恶意软件检测方法,该方法主要通过对Android 应用程序进行分析、提取特征属性以及根据机器学习模型和分类算法判断其是否为恶意软件。...
这个应用程序是一个流行的Android应用程序,使用DeepAi的API来生成Ai艺术图像。如果你想启动你的应用程序,这个应用程序应该是你的最佳选择。 智能绘图项目 AI图像生成器v2.0 - VisualAI +照片编辑工具Android App ...
WheelLog.Android Android上适用于EUC的非官方应用程序。 支持以下制造商: 动感金曲高威老将贡献 :hammer_and_wrench: 拉取要求拉取请求是一种建议在此存储库中进行更改的方法。 我们在master分支中接受拉取请求。 ...
三位作者展示出他们在移动开发领域所积累的经验,并运用他们对Android技术文档的深入理解,从,Android平台的基础知识讲起,再逐步深入到构建Android应用程序所需的基本技能,最后结合示例介绍了如何创建比较复杂的...