`

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键退出应用程序的方法。分享给大家供大家参考。具体分析如下: 最近在做一个Android上的应用,碰到一个问题就是如何实现长按back键退出应用程序。在网上查找了很多资料,发现几乎...

    Android中获取后台正在运行的应用列表

    在Android设备中,按Back键会将当前的Activity出栈销毁,而按HOME键却会将之隐藏到后台。如若有多个这样的程序这样操作,我们不知道后台到底有多少个正在运行的应用程序。此程序的目的就列举出后台正在运行的应用...

    Android项目源码给其他应用加锁的程序锁源代码.zip

    Android项目源码给其他应用加锁的程序锁源代码本项目是一个比较有趣的项目源码,可以给其他项目加锁,程序锁的原理是一个“看门狗”的服务定时监视顶层activity,如果activity对应的包名是之前上锁的应用程序的,则...

    Android代码-Android即时消息应用程序

    had a really really busy time, now i'm back for projects and have already some really really cool things under development for you so stay tuned :) Android Instant Messaging Application VIL - Very ...

    Fragment中监听back键

    android fragment中监听back键demo

    2.8 自定义BACK按键

    应用程序要以自己的方式来处理用户按下物理BACK按键后的行为。

    back按键的监听事件

    这个demo主要讲解了Back按键的监听事件,希望可以帮助需要的同学.

    Android代码-AndroidSlideBack

    Android Slide Back 一行代码实现滑动返回 > 1、类似于“小米MIX”/“即刻App” 的这种全屏滑动返回 兼容性好,不易出错 > > 2、相比其他类似的侧滑返回的开源库 这个更扩具有扩展性,效率也相对高一些 > > 3、...

    基于Java的Android应用程序开发-24点游戏源码+详细项目说明.zip

    基于Java的Android应用程序开发-24点游戏源码+详细项目说明.zip 基于Java的Android应用程序开发-24点游戏源码+详细项目说明.zip 基于Java的Android应用程序开发-24点游戏源码+详细项目说明.zip 【项目介绍】 该资源...

    Android代码-pull-back-layout

    Pull Back Layout Pull down to finish an Activity. Download repositories { // ... maven { url "https://jitpack.io" } } dependencies { // ... support library ... // ... compile '...

    Android 2秒内按两次back键退出应用

    通过只重写Activity中的onBackPressed方法,实现2秒内按返回键两次退出应用程序。

    Android中home键和back键区别实例分析

    Android的程序无需刻意的去退出,当你一按下手机的back键的时候,系统会默认调用程序栈中最上层Activity的Destroy()方法来销毁当前Activity,当此Activity又被其它Activity启动起来的时候,会重新调用OnCreate()方法...

    详解React Native监听Android回退按键与程序化退出应用

    详解React Native监听Android回退按键与程序化退出应用 前言 我们知道Android回退按键,会控制页面返回, 并且退出应用并非真正意义退出,仍在后台运行,所以在某些场景下需要监控android回退按键,那么在React ...

    Android task和back stack

    即使那个activitie可能来自不同的应用,Android也靠着把两个activity保存在同一个任务中来实现这种无缝的用户体验. 一个任务是用户在执行某种工作时所交互的activitie的集合.activitie们放置在一个栈("后退栈")中,...

    Android项目源码给其他应用加锁的程序锁源代码

    如果activity对应的包名是之前上锁的应用程序的,则弹出一个页面要求输入解锁密码,此页面不运行用户按“BACK”键返回,否则便能不输入密码直接进入应用程序了。如果密码输入正确则进入应用程序.

    Android 点击两次返回键退出程序

    Android 点击两次返回键退出程序

    深入解析Android系统中应用程序前后台切换的实现要点

    在介绍程序实现之前,我们先看下Android中Activities和Task的基础知识。 我们都知道,一个Activity 可以启动另一个Activity,即使这个Activity是定义在别一个应用程序里的,比如说,想要给用户展示一个地图的信息,...

    Android代码-Fragment-Back-Stack

    Fragment-Back-Stack Fragment Back Stack manager while displaying fragments on single activity and need to maintain on back press Purpose We know that there is activity stack in Android. We don't need ...

Global site tag (gtag.js) - Google Analytics