`

android 彻底关闭应用程序 返回键的捕获

阅读更多

在开发android应用时,常常通过按返回键(即keyCode == KeyEvent.KEYCODE_BACK)就能关闭程序,其实大多情况下该应用还在任务里运行着,其实这不是我们想要的结果。

我们可以这样做,当用户点击自定义的退出按钮或返回键时(需要捕获动作),我们在onDestroy()里强制退出应用,或直接杀死进程,具体操作代码如下:

 

 

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

//按下键盘上返回按钮

if(keyCode == KeyEvent.KEYCODE_BACK){

 

new AlertDialog.Builder(this)

.setIcon(R.drawable.services)

.setTitle(R.string.prompt)

.setMessage(R.string.quit_desc)

.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

}

})

.setPositiveButton(R.string.confirm, new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int whichButton) {

finish();

}

}).show();

return true;

}else{

return super.onKeyDown(keyCode, event);

}

}

 

 

@Override

protected void onDestroy() {

super.onDestroy();

System.exit(0);

//或者下面这种方式

//android.os.Process.killProcess(android.os.Process.myPid()); 

}

 

 

 

分享到:
评论
13 楼 chq32 2011-03-12  
全部都试了,没有一种可以的,,难道真要故意抛个异常才行了?
12 楼 yuanliyin 2011-01-06  
最近没有在做应用了,谢谢提醒,回头试试
11 楼 shiquncai 2011-01-06  
当应用不再使用时,通常需要关闭应用,可以使用以下两种方法关闭android应用:

第一种方法:首先获取当前进程的id,然后杀死该进程。 (建议使用)
android.os.Process.killProcess(android.os.Process.myPid())

第二种方法:终止当前正在运行的Java虚拟机,导致程序终止
System.exit(0);

第三种方法:强制关闭与该包有关联的一切执行
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);   
manager.restartPackage(getPackageName());
<uses-permission android:name="android.permission.RESTART_PACKAGES" />

但是以上在android2.2以前的版本都成测试成功,而android 2.2会有BUG 但是关闭应用的所有activity 可以通过:每打开一个activity 就调用finish(),之后退出时候只关闭当前的就行了!该方法我的项目正在使用 大量测试没有BUG
希望对你有所帮助!
10 楼 houjunli001 2010-05-31  
一个很好的学习Android的博客,http://hi.baidu.com/guoshiandroid
9 楼 yuanliyin 2010-05-30  
tangxuan1988 写道
Activity 里面的finish()只能结束Activity?线程这些怎么办呢?

线程不是进程,它是不是随着activity的生命周期结束而结束呢?有人了解内部机制不?
8 楼 tangxuan1988 2010-05-29  
Activity 里面的finish()只能结束Activity?线程这些怎么办呢?
7 楼 moderating 2010-05-12  
楼上几位是真的试过,还是想当然的瞎掰?

System.exit(0);我试过,没用,更不会让整个JVM退出,android没这么傻

android.os.Process.killProcess(android.os.Process.myPid());
我也试过,也没用,程序仍然在。

这个问题我基本上翻遍了网络,目前还没找到让程序真正退出的办法。只能写代码持有一个退出的标识,做相应的处理
6 楼 yzhong_sa 2010-05-08  
System.exit(0);会导致整个应用的dalvik虚拟机实例crush掉,不鼓励这么做 杀进程是常用做法。
5 楼 dongya1987 2010-05-04  
好东西,谢楼主
4 楼 yuanliyin 2010-05-04  
<div class="quote_title">mncc 写道</div>
<div class="quote_div">
<div class="quote_title">yuanliyin 写道</div>
<div class="quote_div">
<p>android.os.Process.killProcess(android.os.Process.myPid()); </p>
<p> </p>
</div>
<p>没这样子试过,这样子自己强制结束自己不会抛异常吗?</p>
</div>
<p>不会,就是直接相当于linux下直接kill掉一个进程</p>
3 楼 mncc 2010-05-04  
<div class="quote_title">yuanliyin 写道</div>
<div class="quote_div">
<p>android.os.Process.killProcess(android.os.Process.myPid()); </p>
<p> </p>
</div>
<p>没这样子试过,这样子自己强制结束自己不会抛异常吗?</p>
2 楼 yuanliyin 2010-04-30  
rongchengzhuang 写道
嗯哪,android程序的假退出 挺麻烦,不好控制生命周期

所以我觉得像droid这样的多任务系统,明明自己是想关闭应用的,结果后台进程一看还是一堆,是不是在开发应用的时候,都要注意点这个人性化问题,比如,退出前给提示:关闭|返回桌面|取消,这样会不会好些呢,呵呵
1 楼 rongchengzhuang 2010-04-30  
嗯哪,android程序的假退出 挺麻烦,不好控制生命周期

相关推荐

    Android中实现再按一次返回键退出应用程序

    在Android应用开发中,通常我们希望用户在按下返回键时能够退出应用程序,但为了提供更好的用户体验,Android系统并不推荐直接在用户第一次点击返回键时就退出。为了实现“再按一次返回键退出应用程序”的功能,我们...

    android程序崩溃异常捕获

    在Android应用开发中,异常捕获是至关重要的一个环节,它可以帮助开发者及时发现并解决程序运行过程中的问题,提升用户体验。本篇文章将深入探讨“Android程序崩溃异常捕获”这一主题,包括如何实现异常捕获并将其...

    Android 屏蔽home,菜单,返回键 解锁,加锁

    在Android系统中,Home键、菜单键(在某些设备上是多任务键)和返回键是用户界面的重要组成部分,它们提供了导航和操作的基本方式。然而,在特定的应用场景下,如开发特殊应用或游戏时,开发者可能需要屏蔽这些系统...

    android 4.0 上的HOME 键捕获

    在Android中,默认情况下应用程序无法直接监听Home键事件。但是可以通过创建一个特殊类型的对话框——`TYPE_KEYGUARD_DIALOG`类型的对话框来间接实现这一目标。当这样的对话框显示时,它可以捕获Home键事件,并通过...

    Android 捕获home键

    在Android系统中,Home键是用户最常用的导航键之一,用于退出当前应用并返回主屏幕。然而,出于某些特殊需求,开发者可能希望捕获Home键的按下事件,比如实现后台服务持续运行、自定义启动器或者增强用户体验。下面...

    winio键盘捕获工具

    这个驱动程序会注册为系统的一部分,每当键盘有新的按键动作时,系统都会将这些事件发送到驱动程序,然后再传递给其他应用程序。"驱动级键盘捕获.exe"很可能是用来调用winio库并管理驱动的用户模式程序,而"Winio....

    PopupWindow监听返回键

    在Android中,Activity的onKeyDown()方法可以捕获硬件按键的按下事件,包括返回键。因此,我们需要重写这个方法,检查Keycode.KEYCODE_BACK(返回键的代码)并处理对应的逻辑。 ```java @Override public boolean ...

    android处理键盘事件之物理按键(屏蔽后退键)

    Android设备通常配备多个物理按键,包括返回键,这对于应用的导航至关重要。然而,在某些场景下,开发者可能希望禁用或自定义这些行为,例如在游戏或全屏模式下。 首先,让我们理解Android系统如何处理物理按键事件...

    Android高级应用源码-捕获Home键.zip

    在Android系统中,Home键是用户返回桌面的主要途径,通常情况下,按下Home键会结束当前应用程序并回到主屏幕。然而,在某些特定场景下,开发者可能需要捕获并处理Home键事件,比如实现后台运行、锁屏界面或者自定义...

    android linux 捕获按键

    在Android系统中,捕获按键事件是开发过程中的一项重要任务,尤其对于系统级应用或游戏开发者来说更是如此。本文将详细讲解如何在Linux内核层和Android应用层捕获按键事件,以及如何在Android NDK环境中编译和运行...

    Android两次点击返回键退出应用

    在Android开发中,为了提供更好的用户体验,通常会设置一个安全机制,防止用户意外地通过连续点击返回键快速退出应用程序。这个机制就是所谓的“两次点击返回键退出应用”。下面将详细介绍如何实现这一功能。 首先...

    安卓Android源码——返回键退出程序的两种方式.zip

    在安卓(Android)系统中,开发应用程序时,处理返回键以退出程序是常见的需求。本文将详细介绍两种在Android源码中实现此功能的方法,并提供相关的编程实践指导。 方法一:重写onBackPressed()方法 在Android应用...

    Android 全局异常捕获

    在Android开发中,确保应用程序的稳定性和用户体验是至关重要的。当程序出现异常时,如果没有进行适当的处理,可能会导致应用突然崩溃,给用户带来不愉快的体验。因此,全局异常捕获是一个必要的技术手段,用于捕获...

    Android异常捕获demo(可以捕获ANR+UncaughtExceptionHandler)

    `Android异常捕获demo`主要展示了如何有效地捕获和处理两种重要的错误类型:应用程序无响应(ANR)和未捕获异常(UncaughtExceptionHandler)。下面我们将深入探讨这两个概念以及如何在实际应用中实现它们。 1. **...

    Android 使用内置的Camera应用程序捕获图像

    加载并显示一副图像对内存使用情况有显著的影响,Android提供了一个名为BitmapFactory 的实用程序类,该程序提供了一系列的静态方法,允许通过各种来源加载Bitmap图像。针对我们的需求,将从文件加载图像,并在最初...

    Android返回键功能的实现方法

    在开发android应用时,常常通过按返回键(即keyCode == KeyEvent.KEYCODE_BACK)就能关闭程序,其实大多情况下并没有关闭改应用 我们可以这样做,当用户点击自定义的退出按钮或返回键时(需要捕获动作),我们在...

    android全局异常捕获

    在Android开发中,确保应用程序的稳定性和用户体验至关重要。有时候,应用程序可能会遇到未预期的错误或异常,这可能导致程序崩溃,给用户带来不愉快的体验。为了解决这个问题,开发者通常会实现全局异常捕获机制,...

    Android-CrashReporter是捕获应用程序崩溃并将其保存在文件中的便捷工具

    Android-CrashReporter是一款专为Android开发者设计的实用工具,其主要功能是在应用程序崩溃时捕获异常信息,并将其详细记录到文件中,便于开发者后期分析和调试。在Android应用开发过程中,异常处理是非常重要的一...

    Android应用的Crash闪退捕获

    在Android应用开发中,"Crash闪退捕获"是一个至关重要的环节,它涉及到应用程序的稳定性和用户体验。当应用出现未处理的异常时,系统会强制关闭应用,这就是所谓的"闪退"。为了提高应用质量,开发者需要自定义异常...

Global site tag (gtag.js) - Google Analytics