`

android 彻底关闭应用程序(back按键)

阅读更多

在开发android应用时,常常通过按返回键(即keyCode == KeyEvent.KEYCODE_BACK)就能关闭程序,其实大多情况下该应用还在任务里运行着,其实这不是我们想要的结果。
我们可以这样做,当用户点击自定义的退出按钮或返回键时(需要捕获动作),我们在onDestroy()里强制退出应用,或直接杀死进程,具体操作代码如下:

@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		
		//按下键盘上返回按钮
		if(keyCode == KeyEvent.KEYCODE_BACK){
						finish();
			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()); 
	}



但是经过测试在2.1版本以前,我们可以使用如下方法来退出应用:
ActivityManager am = (ActivityManager)getSystemService (Context.ACTIVITY_SERVICE);  
am.restartPackage(getPackageName());  


但是在2。2之后这种方法就不灵光了,个人以自己开发经验来讲,经常用的是自己创建一个列表来保存每次新生成的Activity实例,在想退出程序时,调用一个循环来进行全部的finish操作,今天在浏览网页时,发现一个兄弟用了找个方法,还没来得及测试下效果,各位看到这篇文章的可以测试下,然后反馈一下结果给我,呵呵,我这几天没时间进行测试,拜托,拜托:
方法就是:

使用Android的Broadcast机制。在所有的Activity中注册退出程序的消息,当收到消息时调用finish方法。然后再有退出程序功能的Activity上广播关闭消息。
代码如下:
package com.kingtone.activity;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
/**
 * 所有Activity的父类,用来注册退出程序的广播事件,
 * 并且对收到的退出程序事件进行处理
 * @author Administrator
 *
 */
public class CommonActivity  extends Activity {
	
    //广播的内部类,当收到关闭事件时,调用finish方法结束activity
    private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            finish();
        }
    };

    @Override
    public void onResume() {
        super.onResume();
        //在当前的activity中注册广播
        IntentFilter filter = new IntentFilter();
        filter.addAction(GlobalVarable.EXIT_ACTION);
        this.registerReceiver(this.broadcastReceiver, filter);
    }
}



在需要退出程序的Activity(CommonActivity的子类)中,退出程序代码如下:
Intent intent = new Intent();
intent.setAction(GlobalVarable.EXIT_ACTION); // 退出动作
this.sendBroadcast(intent);// 发送广播
super.finish();
//退出后台线程,以及销毁静态变量
System.exit(0);

分享到:
评论
1 楼 ivanhxy 2011-08-16  
看了您的几篇文章,都写得挺好的。有空到Touch Android 论坛 指导一下我们

相关推荐

    Android实现长按back键退出应用程序的方法

    以下将详细讲解如何在Android应用中实现长按Back键退出应用程序。 首先,我们需要重写`onKeyDown()`和`onKeyUp()`方法。这两个方法是Android中处理键盘输入的关键函数,分别在按键按下和按键释放时被调用。为了判断...

    android退出程序

    在Android开发中,有时我们需要实现一个功能,即当用户连续两次点击返回键时,应用程序能够完全退出。这种需求常见于一些较为复杂的多Activity应用中,目的是为了提供更好的用户体验,避免用户误操作导致的应用意外...

    Android 物理按键整理及实例代码

    如果用户在2秒内再次按下返回键,应用程序将退出,否则将当前时间作为新的起始时间并显示提示消息。 此外,还有一些常用的物理按键键码,如: - 电源键:`KeyEvent.KEYCODE_POWER` - 返回键:`KeyEvent.KEYCODE_...

    按两次回退键退出程序例子.zip

    这个例子“按两次回退键退出程序”是Android应用程序中一个常见的功能设计,它主要用于防止用户意外地关闭应用程序。通常,按下一次回退键会返回上一个活动(Activity),而连续按两次则会退出整个应用程序。这一...

    返回键退出程序的两种方式.zip

    这里我们将深入探讨两种主要的方式,使应用程序在Android中响应返回键并实现退出程序的功能。 第一种方式是通过重写Activity的onBackPressed()方法。这个方法在用户点击返回键时默认被调用。我们可以在自定义的...

    Android双击返回键退出程序的实现方法

    如果`isExit`已经为`true`,则说明这是第二次按下返回键,执行`finish()`关闭当前`Activity`,并调用`System.exit(0)`彻底退出应用程序。 需要注意的是,这个功能仅适用于Android的硬件返回键,对于没有物理返回键...

    Android 再按一次返回键退出程序实现思路

    如果时间间隔未超过2秒,说明用户在短时间内再次按下返回键,这时我们调用`finish()`方法关闭当前Activity,并通过`System.exit(0)`彻底结束应用程序进程。 请注意,`System.exit(0)`并不是在所有情况下都推荐使用...

Global site tag (gtag.js) - Google Analytics