描述: 最近在做项目时,碰到一个诡异的问题,各种可能的导致的原因排查了一天的时间,最后才解决。为什么说诡异,是因为正常情况下是不会出现该问题的,而且百度上还真找不到相关的资料。
问题表现:一个普通的Activity 在经历正常生命周期即:onCreate()–> onStart()–>onResume()后,由于点击了界面上的某个按钮,执行了一些逻辑(暂时不说该逻辑干了什么事),结果由界面现象引起我去查看Log日志,发现该Activity竟然自动执行了onPause()–>onStop()–>onDestroy(); 再onCreate()—>onStart()–>onResume(); 次奥!自动重启了!?
处理:
1、于是第一反应就是是不是程序有什么异常(空指针什么的)导致,查看日志发现,任何Error级别的日志毛都没有;
2、由于该Activity启动时会绑定一个远程Service,使用AIDL进行通讯,于是想是不是由于那个远程Service崩溃导致的,再追踪那个远程Service的进程,却也没有发现任何异常的日志;
3、继续追踪(有难度的bug,一方面能激起程序员的斗志,当然也能让程序员感觉无望崩溃),这次按照操作流程的代码上下流程一步一步Debug,然而当你仔细推敲自己代码逻辑确实没有问题但就是有这样的现象的时候,慢慢就进入抓狂崩溃节奏的节奏。
4、于是突然想到Android系统在一个程序有fatal类型的bug时会强制直接结束掉程序,于是又在一大堆Log日志里搜索fatal/force close之类的关键字,又在ActivityManager 这个tag下看有没有结束Activity的信息,以这些手段看能不能查出什么端倪,仍然无果;
5、脑海里突然闪现过一个想法,就是一个Activity在什么情况下会使生命周期重走一遍呢?由于早前研究Activity生命周期时碰过类似情形,答案即为当用户按下电源、或者横竖屏切换等条件下,如果当前Activity在AndroidManifest项目清单没有写上android:configChanges=”“属性时,会使得当前Activity重绘,即先Destroy掉然后重启,心中暗喜,但是不是这样引起的呢?且等,我的那个Activity虽然没有写android:configChanges属性,但是我并没有按电源键,更没有横竖屏幕切换(因为我定了屏幕方向为android:screenOrientation=”portrait”),也没有软键盘的隐藏与展示,那么究竟是什么鬼导致的configChanges呢??抓狂!!
真相大白:
既然已经想到是由于configChanges导致的Activity重绘,那么就往这方面去想还有什么会导致configChanges,于是这次机灵一点,再次从整个手机系统的Log入手,输入关键字“change”,在过滤同的Log日志中仔细找找有什么change了,(其实这里笨了,因为既然知道了写上android:configChanges属性就不会导致Activity重绘,那么直接去那里查属性值就好了),结果在日志中查看到“SimStatusChangeReceiver”,好吧,大概意思就是说Sim卡状态变化了,在此就解释在操作那个按钮干了什么事,因为项目比较特殊能改变Sim卡的禁用与启用状态,然后再在android:configChanges=”xx|xx”,属性值里查看,还真有“mcc“、”mnc”两值,把这个写上吧,即 android:screenOrientation=”portrait”
android:configChanges=”mcc|mnc” (意思即为匹配Sim卡中的状态变化),最后问题解决。

**总结:**1、碰到该问题时没有第一时间想到Activity自动重启是由于configChange引起的;
2、以前并不知道原来Sim卡的状态变化也是configChanges的一种,且会让没有写configChanges属性的Activity重启,Sim变化的触发情况倒是有:1)、手机中的Sim卡在某种情况下突然失效;2)、用户热拨插Sim卡(一些手机的Sim卡槽在手机右侧抽屉式);3、软件行为等。
3、就算Activity重启,也需要作好一些状态的保存,然后在onCreate()生命周期方法中再提取出来
另configChanges=”“还有一些其他值选项,大家可以去参考研究一下。

最后:调试一个bug,写了那么多废话,让各位眼睛受累了,在此笔者只是记录一下这个比较诡异bug让我在debug它时抓狂的过程以及解决了它后,志之以共勉。

Android Activity自动重启的问题相关推荐

  1. android activity自动重启,8) 十分钟学会android--Activity的生命周期之停止与重启

    恰当的停止与重启我们的activity是很重要的,在activity生命周期中,他们能确保用户感知到程序的存在并不会丢失他们的进度.在下面一些关键的场景中会涉及到停止与重启: 用户打开最近使用app的 ...

  2. android 应用自动重启,Android:如何在“强制关闭”后自动重启应用程序?

    Android:如何在"强制关闭"后自动重启应用程序? 在Android应用程序中,如果我们没有得到正确的例外,我们通常会收到"强制关闭"错误. 如果强行关闭, ...

  3. Android 系统自动重启Bug(高通平台)

    点击打开链接 最近客户反馈了一个Bug,我们的系统用着用着会自动重启,尤其是在拨号的时候极容易死机或者进入下载模式.根据老大和高通的支持得到了一个解决方案. 在Android系统中,有这么一个文件夹: ...

  4. android服务自动重启,安卓service关闭后怎么自动重启

    满意答案 首先申明service关闭有两种情况: 1.程序进入后台,系统可能会销毁应用,可以理解为android端监听推送消息的服务在启动后是一直在后台运行的,但是当内存不足时,或者第三方应用清理内存 ...

  5. android 应用自动重启,Android 应用崩溃后自动重启的方法

    public class HKApplication extends Application { private List activityList = new ArrayList(); @Overr ...

  6. android activity自动跳转,Android activity跳转之finish()方法的作用

    最近在看郭神的<第一行代码(第2版)>,温故知新,看到有很多地方在页面跳转后还加了一句:finish();,原来像下面代码这样用 Intent 从 A activity 跳到 B acti ...

  7. android 信鸽 自动重启,Android简单集成信鸽推送

    添加项目的buid.gradle ndk { //选择要添加的对应cpu类型的.so库 abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a' // 还可以添 ...

  8. python自动化脚本--自动重启android手机

    思路:通过adb reboot命令来控制android手机自动重启 #!/usr/bin/env python # -*- coding: utf-8 -*- import os import tim ...

  9. android 程序崩溃后自动重启,Android 应用Crash 后自动重启的方法小结

    前提 首先,我们肯定要在Application里面注册一个CrashHandler,监听应用crash public class TestApplication extends MultiDexApp ...

最新文章

  1. python 元组和列表区别_Python 基础(六):列表与元组
  2. java 数组越界异常_数组越界异常 求解决!!!
  3. 企业 SpringBoot 教程(六)springboot整合mybatis
  4. 为什么停车类APP看似缺口巨大却没有成长起来?
  5. Linux学习笔记之——Linux硬盘分区知识
  6. python爬虫运行不出结果_请问这个为什么就是爬不到,运行之后电脑卡的不行,求大佬指导...
  7. Python中对列表list进行定义、增删改查、遍历及与元组的对比
  8. 红橙Darren视频笔记 界面优化与屏幕适配(上)
  9. 【PostgreSQL-9.6.3】psql常用命令
  10. 去除Xcode6创建工程时自带的storyboard
  11. OC 类的load方法
  12. SSH Secure Shell Client安装和使用
  13. 联想小新air13pro重装系统_小新air13pro改win7系统 联想小新air13pro安装win7系统教程...
  14. 华为设备初始用户名/密码
  15. 计算机毕业论文附录的模板,毕业论文附录格式要求
  16. 世界前五大IT咨询公司
  17. 使用scrapy框架爬取前程无忧
  18. 漫画:位运算技巧助你俘获offer
  19. 《人生只有一次,去做自己喜欢的事》读书笔记
  20. 发款php蜘蛛统计插件只要有mysql就可用

热门文章

  1. 极路由s1有wds_极路由极壹S评测:内置网速限制 需购SD卡
  2. sql语句创建表空间、用户
  3. IE 11 无法安全地连接到此页面,这可能是因为该站点使用过期的或不安全的 TLS 安全设置
  4. java解密zip文件(亲测可用)
  5. 哥们,B/S了解吗?——啥玩意,我是敲代码的
  6. 85智慧楼宇建设解决方案
  7. .isAssignableFrom的用法
  8. 分享,好看的PPT模板网站
  9. 质量管理数字化(QMS系统)该如何开展
  10. iOS 6 Passbook 入门 2/2