对于单一Activity的应用来说,退出很简单,直接finish()即可。
当然,也可以用killProcess()和System.exit()这样的方法。

但是,对于多Activity的应用来说,在打开多个Activity后,如果想在最后打开的Activity直接退出,上边的方法都是没有用的,因为上边的方法都是结束一个Activity而已。
当然,网上也有人说可以。
就好像有人问,在应用里如何捕获Home键,有人就会说用keyCode比较KEYCODE_HOME即可,而事实上如果不修改framework,根本不可能做到这一点一样。
所以,最好还是自己亲自试一下。

那么,有没有办法直接退出整个应用呢?
在2.1之前,可以使用ActivityManager的restartPackage方法。
它可以直接结束整个应用。在使用时需要权限android.permission.RESTART_PACKAGES。
注意不要被它的名字迷惑。

可是,在2.2,这个方法失效了。
在2.2添加了一个新的方法,killBackgroundProcesses(),需要权限
android.permission.KILL_BACKGROUND_PROCESSES。
可惜的是,它和2.2的restartPackage一样,根本起不到应有的效果。

另外还有一个方法,就是系统自带的应用程序管理里,强制结束程序的方法,forceStopPackage()。
它需要权限android.permission.FORCE_STOP_PACKAGES。
并且需要添加android:sharedUserId="android.uid.system"属性
同样可惜的是,该方法是非公开的,他只能运行在系统进程,第三方程序无法调用。
因为需要在Android.mk中添加LOCAL_CERTIFICATE
:=
platform。
而Android.mk是用于在Android源码下编译程序用的。

从以上可以看出,在2.2,没有办法直接结束一个应用,而只能用自己的办法间接办到。

现提供几个方法,供参考:

1、抛异常强制退出:
该方法通过抛异常,使程序Force
Close。
验证可以,但是,需要解决的问题是,如何使程序结束掉,而不弹出Force
Close的窗口。

2、记录打开的Activity:
每打开一个Activity,就记录下来。在需要退出时,关闭每一个Activity即可。

3、发送特定广播:
在需要结束应用时,发送一个特定的广播,每个Activity收到广播后,关闭即可。

4、递归退出
在打开新的Activity时使用startActivityForResult,然后自己加标志,在onActivityResult中处理,递归关闭。

除了第一个,都是想办法把每一个Activity都结束掉,间接达到目的。
但是这样做同样不完美。
你会发现,如果自己的应用程序对每一个Activity都设置了nosensor,在两个Activity结束的间隙,sensor可能有效了。
但至少,我们的目的达到了,而且没有影响用户使用。

为了编程方便,最好定义一个Activity基类,处理这些共通问题。

最新文章

  1. BPM到底能做什么?K2为你解读
  2. thinkphp和uploadfiy
  3. Linux内核系列之Block块层(一)
  4. Android开发中用友盟做分享的一些坑
  5. UVA 10037 贪心算法
  6. 《Qt on Android核心编程》夹
  7. velocity的宏
  8. 为什么要使用50ohm阻抗?
  9. Linux编程学习笔记(二)
  10. create pdf file using Spire.Pdf or iTextSharp or PdfSharp
  11. Rstudio+mysql写入中文表
  12. 剑指Offer(三):从尾到头打印链表
  13. Error:Could not determine the class-path for interface com.android.builder.model.AndroidProject.
  14. [T-ARA][O My God]
  15. 笔试题-sql语句
  16. 如何补装oracle的sample schema
  17. Android Service完全解析,关于服务你所需知道的一切(上)
  18. gvim 全屏 插件
  19. 按钮在执行frame动画的时候怎么响应触发事件?
  20. Python-dataframe合并(merge函数)

热门文章

  1. vector释放内存之swap方法
  2. Java泛型小记
  3. Hibernate中 一 二级缓存及查询缓存(1)
  4. 恢复所有情况的ip地址
  5. 学习动态性能表(1)--v$sysstat
  6. mongodb数据操作(CRUD)
  7. MFC学习(四) 消息机制
  8. AngryFuzz3r-web扫描工具
  9. kali下安装go环境
  10. NetBeans+Xdebug调试原理