一、出现的场景

  在开发过程中,想必你也一定遇到过这样的问题,当我们的应用发生Crash时异常退出,然后又自动启动跳转到未知页面,此时应用在崩溃前保存的全局变量被重置,用户状态丢失,显示数据错乱。更让我们头疼的是,这种崩溃后重启的情况,并不是每次都会遇到,那么究竟是因为什么呢?

  经测试,在 Android 的 API 21 ( Android 5.0 ) 以下,Crash 会直接退出应用,但是在 API 21 ( Android 5.0 ) 以上,系统会遵循以下原则进行重启:

  1. 包含 Service,如果应用 Crash 的时候,运行着Service,那么系统会重新启动 Service。
  2. 不包含 Service,只有一个 Activity,那么系统不会重新启动该 Activity。
  3. 不包含 Service,但当前堆栈中存在两个 Activity:Act1 -> Act2,如果 Act2 发生了 Crash ,那么系统会重启 Act1。
  4. 不包含 Service,但是当前堆栈中存在三个 Activity:Act1 -> Act2 -> Act3,如果 Act3 崩溃,那么系统会重启 Act2,并且 Act1 依然存在,即可以从重启的 Act2 回到 Act1。

看了上述解释,我们终于知道应用在什么种情况下才会重启。

二、解决方法

   维护所有已经打开的Activity到一个List中,崩溃时在Thread.UncaughtExceptionHandler 中finish掉所有Activity, 这样按上述列举的规则系统就不会自动重启相应的Activity了。

更多相关文章

  1. Nginx系列教程(六)| 手把手教你搭建 LNMP 架构并部署天空网络电影
  2. Android(安卓)M App 永久隐藏导航栏的Solution
  3. Android之——利用系统权限实现手机重启(获取系统权限签名详解)
  4. 英特尔公司面向 Android(安卓)软件开发套件(SDK)4.3 的 x86 Androi
  5. 学习文件读写的相关知识
  6. 揭秘OPhone白手起家前后:一个系统的诞生
  7. AndroidManifest详解之Application(有图更好懂)
  8. 关于Android(安卓)的系统架构
  9. 开发商为什么仍然忽视Android系统?

随机推荐

  1. android 9.0 SD卡权限问题 文件管理器没
  2. 四十六、android中的Bitmap
  3. android 获取图片信息 之 ExifInterface
  4. android hal学习——aidl,java service,jni
  5. Android(安卓)Intent
  6. popwindow动画显示消失,activity切换动画
  7. android 使用Intent传递对象 Serializabl
  8. android中LayoutInflater的使用
  9. android 使用私有maven仓库发布、打包、
  10. Android(安卓)UI(5)Getting Started - Sh