转载:Android完全关闭应用程序

news/2024/7/11 0:45:25 标签: Android, 网络应用, OS, ITeye, Blog

在工作过程序中遇到一个需要完全关闭应用程序的问题,在网络上找了一大堆的文章,每篇都是用 System.exit(0) 或者android.os.Process.killProcess(android.os.Process.myPid()) 这两种方法,但是我试过了, System.exit(0) 这个根本不行,而android.os.Process.killProcess(android.os.Process.myPid()) 这个只能关闭当前的 Activity ,也就是对于一个只有单个 Activity 的应用程序有效,如果对于有多外 Activity 的应用程序它就无能为力了。

         下面我介绍一下对于多个 Activity 的应用程序的完全关闭方法:

在 ActivityManager 类中提供了如下的方法:

         /**

         * Have the system perform a force stop of everything associated with

         * the given application package. All processes that share its uid

         * will be killed, all services it has running stopped, all activities

         * removed, etc. In addition, a {@link Intent#ACTION_PACKAGE_RESTARTED}

         * broadcast will be sent, so that any of its registered alarms can * be stopped, notifications removed, etc.

         *

         * You must hold the permission * {@link android.Manifest.permission#RESTART_PACKAGES} to be able to

         * call this method.

         *

         * @param packageName The name of the package to be stopped.

         */

    public void restartPackage(String packageName) {

    try {

        ActivityManagerNative.getDefault().restartPackage(packageName);

    }

    catch (RemoteException e) { }

 }

所以如果要关闭整个应用程序的话只需要运行以下两行代码就行:

ActivityManager activityMgr= (ActivityManager) this.getSystemService(ACTIVITY_SERVICE );

activityMgr.restartPackage(getPackageName());

最后还需要添加这个权限才行:

<!-- 关闭应用程序的权限 -->
<uses-permission android:name="android.permission.RESTART_PACKAGES" />

 

多网友可能发现自己的Android程序有很多Activity,比如说主窗口A,调用了子窗口B,在B中如何关闭整个Android应用程序呢? 这里给大家三种比较简单的方法实现。

  首先要说明在B中直接使用finish(),接下来手机显示的还是主窗口A,所以一起来看看是如何实现的吧.

  1. Dalvik VM的本地方法

  android.os.Process.killProcess(android.os.Process.myPid())    //获取PID,目前获取自己的也只有该API,否则从/proc中自己的枚举其他进程吧,不过要说明的是,结束其他进程不一定有权限,不然就乱套了。
  System.exit(0);   //常规java、c#的标准退出法,返回值为0代表正常退出

 2. 任务管理器方法

   首先要说明该方法运行在Android 1.5 API Level为3以上才可以,同时需要权限android.permission.RESTART_PACKAGES,我们直接结束自己的package即 可,直接使用ActivityManager类的restartPackage方法即可,参数为package name,该类通过getSystemService(Context.ACTIVITY_SERVICE)来实例化ActivityManager对 象,这种方法系统提供的,但需要显示声明权限,所以使用中需要综合考虑。

 3. 根据Activity的声明周期

   我们知道Android的窗口类提供了历史栈,我们可以通过stack的原理来巧妙的实现,这里我们在A窗口打开B窗口时在Intent中直接加入标志 Intent.FLAG_ACTIVITY_CLEAR_TOP,这样开启B时将会清除该进程空间的所有Activity。

 在A窗口中使用下面的代码调用B窗口

Intent intent = new Intent(); 
intent.setClass(Android123.this, CWJ.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  //注意本行的FLAG设置
startActivity(intent);

 接下来在B窗口中需要退出时直接使用finish方法即可全部退出。

 

转载:http://yueguc.iteye.com/blog/939692


http://www.niftyadmin.cn/n/1731037.html

相关文章

java 多态判断非空_java多态总结

/*一、多态&#xff1a;多态是指一个事物的多种存在状态(一个事物的多种体现形态或者一个事物的多种表现形态)1、多态的体现&#xff1a;多态在代码中的体现为&#xff1a;父类引用指向了子类对象即 父类 a new 子类();2、多态的前提&#xff1a;1&#xff0c;类与类之间必须存…

指纹锁方案板工作原理

指纹锁的触摸屏提取来访者的指纹后&#xff0c;把指纹信息反馈会指纹锁的服务器端&#xff0c;服务器调动各种算法来对指纹进行分析&#xff0c;并且把它与系统中储存的用户的指纹进行比对&#xff0c;然后把对比结果进行量化&#xff0c;如果相似度高于一定的量值&#xff0c;…

android 手机存储大小设置,安卓手机使用久了内存不足,简单一招,省出3G容量,快来学学...

华为在使用手机在国内的销量排行老大&#xff0c;并且逐步走向国外市场&#xff0c;相信很多华为手机&#xff0c;但毕竟是基于安卓系统&#xff0c;安卓手机使用久了可能会出 现内存不足等现象。比如我们平时用手机下载音乐或者视频的时候&#xff0c;总是提示这个手机内存不足…

红外线测温仪解决方案程序开发

产品介绍      额温枪&#xff08;红外线测温仪&#xff09;针对量测人体额温基准设计&#xff0c;使用非常简单、方便。1秒可准确测温&#xff0c;无镭射点&#xff0c;免除对眼睛之潜在伤害&#xff0c;不需接触人体皮肤&#xff0c;避免交叉感染&#xff0c;一键测温&am…

Android高手应该精通哪些内容?

很多Android开发者已经度过了初级、中级&#xff0c;如何成为一个Android高手呢? Android123就各个级别的程序员应该掌握哪些内容作为下面分类。 一、初级 1. 拥有娴熟的Java基础&#xff0c;理解设计模式&#xff0c;比如OOP语言的工厂模式要懂得。 2. 掌握Android UI控件、A…

java实现dvd租赁系统_Java架构师必须考虑的 3 个技术问题,秒杀系统实现的过程原理...

1、并发队列的选择Java的并发包提供了三个常用的并发队列实现&#xff0c;分别是&#xff1a;ArrayBlockingQueue、ConcurrentLinkedQueue 和 LinkedBlockingQueue 。ArrayBlockingQueue是初始容量固定的阻塞队列&#xff0c;我们可以用来作为数据库模块成功竞拍的队列&#xf…

血氧仪方案程序开发,芯片供应

血氧仪是在在20世纪40年代开发出来的&#xff0c;其原理是通过还原血红蛋白&#xff0c;氧合血红蛋白在红光和红外光区域的吸收光谱特性&#xff0c;运用朗柏-比尔定律建立数据处理经验公式通过光电转换获取测量结果。测试的过程通常不需要从病人身上抽血&#xff0c;血氧仪也可…

linux ext4-fs error,[求助]EXT4-fs error (device sdb4) ext4_find_entry...

EXT4-fs error (device sdb4) ext4_find_entry:1436 inode #2 comm pvestatd reading directory lblock 0系统不定期出现这个问题&#xff0c;一旦出现系统就挂起了。目前没发现什么明显的规律&#xff0c;也没法人工再现。简单g了一下&#xff0c;主要有两种说法&#xff0c;一…