`
yangwei0915
  • 浏览: 465834 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Android 程序退出的办法

阅读更多

在Android中退出程序比较麻烦,尤其是在多个Activity的程序中,在2.2之前可以采用如下代码退出程序:

ActivityManager am = (ActivityManager)getSystemService (Context.ACTIVITY_SERVICE);
am.restartPackage(getPackageName());

 

此种方法是一种最方便和最简单的退出程序的办法,但是在2.2和2.2之后就不能用了,那么如果我们要退出程序有4种办法:

  1. 采用content view栈:如果程序是多界面,但是又没有强制要求每一个界面一个Activity,可以将每个界面设计为一个View,在界面切换时,只需要调用Activity的setContentView方法设置Activity的Contentview,这样退出程序只需要将这一个Activity退出 就可以了,但是需要设计一个栈来管理content view。
  2. 可以自定义一个Activity的栈,在程序退出时将栈中的所有的Activity进行finish,这种方法,我以前的文章中有详述。
  3. 前两种方法的精髓之处都是需要自己设计一个栈用来管理界面或者Activity,这样程序就比较复杂一些。 第3中方法就是,先让程序到Home界面,然后再将process杀死:代码如下:
    	Intent intent = new Intent(Intent.ACTION_MAIN);
    				intent.addCategory(Intent.CATEGORY_HOME);
    				intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    				startActivity(intent);
    				android.os.Process.killProcess(Process.myPid());
  4. 还有一种就是使用方法是使用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);

 

分享到:
评论
8 楼 happy9837457 2014-03-05  
第三种方法能退出,但是再次打开客户端,竟然是旧的页面!堆栈根本没清除
7 楼 youyoufei 2014-02-15  
试了第3种方法,还挺好用的,Process.myPid();直接这样写可能会报错,改成android.os.Process.myPid();就没问题了
6 楼 yangwei0915 2012-11-27  
dictator_昌 写道
哪种好用呢?
还有,第四种的全局变量怎么设置?(初学)

我认为第三种要好用一点。
5 楼 dictator_昌 2012-11-20  
哪种好用呢?
还有,第四种的全局变量怎么设置?(初学)
4 楼 dictator_昌 2012-11-20  
哪种好用呢?
还有,第四种的全局变量怎么设置?(初学)
3 楼 yangwei0915 2012-04-05  
是自己定义的全局变量
2 楼 cy86201885 2012-03-31  
GlobalVarable.EXIT_ACTION这个是自己定义的全局变量还是什么?
1 楼 cy86201885 2012-03-31  
正好在找这方面的,谢谢啊

相关推荐

    android 退出程序解决内存释放的问题

    做Android项目的时候发现一个问题:当应用程序退出了,点击”设置”查看应用程序,界面显示着可以点击”强制关闭”. 我认为造成这样的原因是还有开启的activity没有被destroy,然后做调试,之后发现开启的activity应该是...

    解析Android中如何做到Service被关闭后又自动启动的实现方法

    大部分时候,程序员也不想把软件做成流氓软件,没办法,领导说了算。 我们在使用某些Android应用的时候,可能会发现安装了某应用以后,会有一些服务也会随之运行。而且,这些服务每次都会随着手机开机而启动。有的...

    ANDROID 完美退出APP的实例代码

    然后在程序退出的地方调用它们的 finish()方法。使用全局变量。对了,第一个想到的就是继承 Application,代码入下: 代码如下:public class AgentApplication extends Application { private List<Activi

    Android实现双击返回键退出应用实现方法详解

    现在市面上很多应用都会有当用户按返回键的时候提示用户:再按一次将退出应用的提示,也就是双击双击返回键退出应用,接下来我们就用几种办法来实现这个功能 效果图 实现 第一种办法 响应Activity的 onKeyUp事件,两...

    webview网页后退

    在Android开发中,WebView是一个非常重要的组件,它允许我们在应用程序中内嵌网页内容,实现与网页的交互。当我们处理WebView的导航操作时,有时会遇到一个常见问题:用户点击后退按钮,但WebView并未退出或者...

    MTK android PC驱动.zip

    1. **关闭杀毒软件**:有些安全软件可能会误报驱动为恶意程序,因此在安装前最好暂时禁用或退出这些软件。 2. **开启USB调试**:在手机上,用户需要进入“开发者选项”并开启“USB调试”,以允许电脑进行调试操作。 ...

    android 捕获异常重启APP

    在Android应用开发中,有时我们需要处理程序异常情况,例如,当应用程序崩溃或遇到无法恢复的错误时,我们可能希望自动重启应用以提供更好的用户体验。"android 捕获异常重启APP"这一主题就是关于如何在Android应用...

    android刷系统后找不到sd卡的解决办法

    在Android系统中,SD卡是用户扩展存储空间的重要方式,用于存放应用程序、媒体文件和个人数据。然而,在刷入新系统后,有时会出现无法识别或找不到SD卡的问题,这可能是由于多种原因引起的。以下是一些可能的解决...

    Android 开发技巧

    9.11、彻底退出当前程序 212 9.12、获取应用程序的名称,包名,版本号和图标 212 9.13、调用ANDROID INSTALLER 安装和卸载程序 215 9.14、后台监控应用程序包的安装&卸载 216 9.15、显示应用详细列表 224 9.16、寻找...

    Android webview 内存泄露的解决方法

    Android WebView 内存泄露的解决方法 Android WebView 是一个非常常用的组件,然而它也存在一些问题,其中之一就是内存泄露的问题。在 Android 中,WebView 内存泄露的解决方法主要有两种:一种是避免在 XML 中直接...

    Android Activity切换动画详解及实例

    1. Android 系统版本 2.0 以下,这个没办法,想其他办法解决切换动画吧。 2. 在 ActivityGroup 等的嵌入式 Activity 中,这个比较容易解决,用如下方法就可以了: ```java this.getParent()....

    android反编译(dex2jar.zip)

    1.使用命令行时,当转某个类失败时将继续,而不退出程序 2.解决读取class annotation 的一个问题 Fixes issue 42 3.rename package pxb.android.dex2jar to com.googlecode.dex2jar 4.issue 33, issue 43在启动...

    MTK camera 调试常见问题及解决办法

    在Android系统中,MediaTek(MTK)摄像头驱动是设备硬件接口的重要组成部分,它负责连接摄像头传感器和上层应用程序框架,使得系统能够捕捉图像和录制视频。本文将深入探讨MTK相机调试过程中遇到的常见问题及其解决...

    app打开最近任务(后台进程)

    在Android系统中,"最近任务"通常指的是最近使用的应用程序列表,用户可以通过长按Home键或者在多...在实际开发过程中,遇到类似问题时,一定要耐心细致,充分利用Android的调试工具和社区资源,以找到最佳的解决办法。

    5个Android开发中比较常见的内存泄漏问题及解决办法

    如果单例中持有Activity的Context,而单例的生命周期与应用程序一样长,当Activity退出时,由于单例仍然持有对Activity的引用,Activity的内存无法被正确回收。解决方法是在单例中使用`getApplicationContext()`代替...

    Android扫描二维码时出现用户禁止权限报错问题解决办法

    在Android应用开发中,扫描二维码是一项常见的功能,但有时候用户可能会出于隐私保护等原因禁止应用访问摄像头,这会导致扫描二维码时出现权限报错并可能导致程序崩溃。本文将详细讲解如何处理这种用户禁止权限的...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    Android 一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导开发 IOS 由苹果公司开发的移动操作系统 Webkit 一个开源的浏览器引擎,在手机上的...

    LeadBBS 9.2.zip

    LeadBBS,中文ASP论坛程序名称,于2002年由著名ASP程序员SpiderMan等编写而成。在论坛兴盛的2002-2005年曾经风靡一时,LEADBBS以其短小精干、运行速度快而受到广大网站建设者,特别是个人网站的欢迎。许多论坛,特别...

    APKTool批处理版l

    一般而言,一个编写规范的Android程序,会把所有字符串资源都分离出来,放在values的strings.xml文件中,values目录中存放的是默认语言字符串资源(一般为英文)。APK程序在处理字符串资源时会先判断语言环境,然后...

    sim71x0系列模块固件升级

    QCN文件会保存在固件目录内)、DownFW(只下载模块固件CP部分)、DownAP(只下载模块固件AP部分)、PushUpdate(下载补丁)、RecoverQCN(只...模块端口号)、Exit(退出模块升级主程序)、MeidCheck(检查Meid设置)...

Global site tag (gtag.js) - Google Analytics