打开任务管理器,杀死应用,导致程序奔溃,报下面的错误:

经过测试是加入小米推送导致的。问小米推送的技术支持,说从callstack中看,是share sdk只允许在主进程注册,不允许在其它进程注册。而小米推送需要创建不同的进程。

application的onCreate方法是“进程“的入口,app创建的所有进程都会调用这个方法。所以创建小米推送进程时调用了application的onCreate方法,导致了这个错误。解决方案是像小米推送初始化一样,在sharesdk初始化时加一个判断。

究其原因,这涉及到多进程模式的运行机制。小米的pushservice要跑在一个新的进程中的时候,由于系统要创建新的进程同时分配独立的虚拟机,所以这个过程其实就是启动一个应用的过程。因此,相当于系统又把这个应用重新启动了一遍,所以会创建新的Application。为了更加清晰地展示这一点,下面我们来做个测试,首先在application的onCreate方法中打印出当前进程的名字,然后连续启动三个同一个应用内但属于不同进程的activity,按照期望,Application  的 onCreate 应该执行三次并打印出三次进程名不同的log,代码如下所示。

public class MyApplication extends Application {@Overridepublic void onCreate() {super.onCreate();Log.d("thh", "[MyApplication onCreate] application start, process name:"+getProcessName());}private String getProcessName(){ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);for (ActivityManager.RunningAppProcessInfo runningAppProcessInfo:activityManager.getRunningAppProcesses()) {if (runningAppProcessInfo.pid == android.os.Process.myPid()) {return runningAppProcessInfo.processName;}}return null;}
}

运行后通过log可以看出,Application执行了三次onCreate,并且每次的进程名称和进程id都不一样,它们的进程名和我们为activity指定的android:process属性一致。这也就证实了在多进程模式中,不同进程的组件的确会拥有独立的虚拟机、Application 以及内存空间。

此外,使用多线程会造成如下方面的问题: 
1. 静态成员和单例模式完全失效 
2. 线程同步机制完全失效 
3. SharedPreferences的可靠性下降 
4. Application会多次创建

在以后的开发过程中要多加注意!

解决后台杀应用,小米推送再次初始化导致ShareSDK初始化报错,使应用崩溃相关推荐

  1. spring-boot整合smart-doc推送接口文档到torna报错Failure to find xxx... resolution will not be reattempted until

    spring-boot整合smart-doc推送接口文档到torna报错Failure to find xxx- resolution will not be reattempted until th ...

  2. 小米推送java_idea + springboot 的java后台服务器通过小米推送

    public class XiaomiPush { // 1.小米推送(我只推送Android且只应用regId发起推送,所以下面只有推送Android的代码 private static final ...

  3. git 新建分支 推送到远程 首次pull代码报错 git branch --set-upstream-to=origin/<branch>

    git pull 提示 git branch --set-upstream-to=origin/ xxx 在本地创建新分支后,上传到远程仓库,首次pull 的时候,会提示: 当前分支与远程分支并未建立 ...

  4. 小米杀不死的消息推送-- Android、java后端同时接入小米推送

    作者简介 微信公众号(高质量文章推送):陈博易 前言 小米手机选择小米推送的原因:App进程被杀死的情况下,小米手机上的小米推送服务并不会被杀死(除非用户手动在设置中关闭了该推送的权限),所以我选择给 ...

  5. (4.2.12.3)浅谈第三方推送[bug查询]:百度推送、小米推送、华为推送

    前言(常见坑): 小心是AndroidManifest文件被别人改动过...... 升级推送SDK时往往可能会引入新问题.....除非有重大更新,否则可以延迟2个版本进行升级 为了更好应对出问题的用户 ...

  6. (4.2.12)浅谈第三方推送[推送基础]:百度推送、小米推送、华为推送

    市面上目前做免费推送服务的有很多,友盟.极光.百度.小米.华为等,由于android机型的多样性,在使用单独的一种推送时,往往会造成一些机型无法获取(当然,内部原因可能很复杂). Android 第三 ...

  7. Android 集成小米推送

    前言 在Android开发中,消息推送功能的使用非常常见. 为了降低开发成本,使用第三方推送是现今较为流行的解决方案. 今天,我将手把手教大家如何在你的应用里集成小米推送 该文档基于小米推送官方Dem ...

  8. 小米推送的那些坑 :有的手机能收到推送,有的收不到,通知栏只能显示一个。。。。。

    前提:产品投放于国外市场,投放于Google Paly,开发在国内.运营只需要在小米控制台进行小米推送,不需要服务器配合. 遇到问题: ①(一开始对接问题) 一直不展示通知消息 ② 在通知栏只展示一条 ...

  9. Android消息推送:手把手教你集成小米推送

    <script type="text/javascript" src="http://static.blog.csdn.net/scripts/category.j ...

最新文章

  1. python潜力开源项目_比较了1000多个Python开源项目,精选出这34个
  2. 深入理解Java虚拟机(第三弹)- JVM 内存分配与回收策略原理,从此告别 JVM 内存分配文盲
  3. java 采样_java 采集数据
  4. C++内联函数(inline function)
  5. 如何往eclipse中导入maven项目
  6. 顺序表的插入删除查找遍历
  7. Docker(4)-容器互联与端口映射
  8. WP7 开发(十五)输入范围和文本框
  9. HDU 6096 AC自动机
  10. NB-IoT适用于电子门锁通信吗?
  11. js ajax 访问java函数,将url分配给Java EE项目中的ajax(js)函数
  12. fortran语言能用matlab,Fortran语言转matlab语言
  13. python简单爬虫代码-python简单爬虫(二)
  14. DB2查询主键、索引、表约束
  15. vm14卡顿及安装linux黑屏问题
  16. silvaco的石墨烯fet仿真_COMSOL Multiphysics多物理场仿真光电学习必看的内容
  17. 通过docker创建Nginx容器并运行Vue项目(可用https进行访问)
  18. html语言中alt,html中alt的用法
  19. linux下c++程序崩溃,如何处理core dump
  20. java借口不同程序_「JAVA」多态的灵魂,面向接口的程序设计,这才是你该懂得的接口(interface)...

热门文章

  1. C语言打飞机、贪吃蛇游戏
  2. 完美世界校招在线笔试题-互联网Java(11月1日)编程题
  3. 高效Linux用户需要了解的命令行技能
  4. 北京的女光棍为何有50多万?
  5. RainyMood 享受漫步在雨中、又不用全身濕透的浪漫,幫助你文思泉湧的雨聲產生器...
  6. JavaFX常用键盘字符常量
  7. Linux服务器kswapd0病毒查杀处理
  8. 免费电子书 of SyncFusion
  9. 仓库处理中 无法修改_虾皮跨境:Shopee SLS仓库异常件退货流程。附:周三晚开个课。...
  10. 三星今年将发布首款全网通芯片Exynos 7872