`

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....

    android linux 捕获按键

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

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

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

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

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

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

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

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

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

    Android 全局异常捕获

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

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

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

    Android返回键功能的实现方法

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

    android全局异常捕获

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

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

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

    Android应用的Crash闪退捕获

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

    ionic应用-tab应用+返回键监听

    “返回键监听”是Android系统中的一个特性,它允许应用捕获并处理用户按下物理返回键或者在界面上触发的返回操作。在Ionic应用中,由于它是基于Web技术构建,所以需要额外的处理来实现这一功能。通常,开发者会使用...

    android 采用windowmanager屏蔽home键

    在Android系统中,Home键是默认行为,允许用户随时返回主屏幕或切换到其他应用程序。然而,有时开发者可能需要在特定场景下禁用Home键,例如在全屏游戏或者某个重要操作过程中,确保用户不会意外退出。这通常通过`...

Global site tag (gtag.js) - Google Analytics