解决后台杀应用,小米推送再次初始化导致ShareSDK初始化报错,使应用崩溃
打开任务管理器,杀死应用,导致程序奔溃,报下面的错误:
经过测试是加入小米推送导致的。问小米推送的技术支持,说从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初始化报错,使应用崩溃相关推荐
- 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 ...
- 小米推送java_idea + springboot 的java后台服务器通过小米推送
public class XiaomiPush { // 1.小米推送(我只推送Android且只应用regId发起推送,所以下面只有推送Android的代码 private static final ...
- git 新建分支 推送到远程 首次pull代码报错 git branch --set-upstream-to=origin/<branch>
git pull 提示 git branch --set-upstream-to=origin/ xxx 在本地创建新分支后,上传到远程仓库,首次pull 的时候,会提示: 当前分支与远程分支并未建立 ...
- 小米杀不死的消息推送-- Android、java后端同时接入小米推送
作者简介 微信公众号(高质量文章推送):陈博易 前言 小米手机选择小米推送的原因:App进程被杀死的情况下,小米手机上的小米推送服务并不会被杀死(除非用户手动在设置中关闭了该推送的权限),所以我选择给 ...
- (4.2.12.3)浅谈第三方推送[bug查询]:百度推送、小米推送、华为推送
前言(常见坑): 小心是AndroidManifest文件被别人改动过...... 升级推送SDK时往往可能会引入新问题.....除非有重大更新,否则可以延迟2个版本进行升级 为了更好应对出问题的用户 ...
- (4.2.12)浅谈第三方推送[推送基础]:百度推送、小米推送、华为推送
市面上目前做免费推送服务的有很多,友盟.极光.百度.小米.华为等,由于android机型的多样性,在使用单独的一种推送时,往往会造成一些机型无法获取(当然,内部原因可能很复杂). Android 第三 ...
- Android 集成小米推送
前言 在Android开发中,消息推送功能的使用非常常见. 为了降低开发成本,使用第三方推送是现今较为流行的解决方案. 今天,我将手把手教大家如何在你的应用里集成小米推送 该文档基于小米推送官方Dem ...
- 小米推送的那些坑 :有的手机能收到推送,有的收不到,通知栏只能显示一个。。。。。
前提:产品投放于国外市场,投放于Google Paly,开发在国内.运营只需要在小米控制台进行小米推送,不需要服务器配合. 遇到问题: ①(一开始对接问题) 一直不展示通知消息 ② 在通知栏只展示一条 ...
- Android消息推送:手把手教你集成小米推送
<script type="text/javascript" src="http://static.blog.csdn.net/scripts/category.j ...
最新文章
- python潜力开源项目_比较了1000多个Python开源项目,精选出这34个
- 深入理解Java虚拟机(第三弹)- JVM 内存分配与回收策略原理,从此告别 JVM 内存分配文盲
- java 采样_java 采集数据
- C++内联函数(inline function)
- 如何往eclipse中导入maven项目
- 顺序表的插入删除查找遍历
- Docker(4)-容器互联与端口映射
- WP7 开发(十五)输入范围和文本框
- HDU 6096 AC自动机
- NB-IoT适用于电子门锁通信吗?
- js ajax 访问java函数,将url分配给Java EE项目中的ajax(js)函数
- fortran语言能用matlab,Fortran语言转matlab语言
- python简单爬虫代码-python简单爬虫(二)
- DB2查询主键、索引、表约束
- vm14卡顿及安装linux黑屏问题
- silvaco的石墨烯fet仿真_COMSOL Multiphysics多物理场仿真光电学习必看的内容
- 通过docker创建Nginx容器并运行Vue项目(可用https进行访问)
- html语言中alt,html中alt的用法
- linux下c++程序崩溃,如何处理core dump
- java借口不同程序_「JAVA」多态的灵魂,面向接口的程序设计,这才是你该懂得的接口(interface)...
热门文章
- C语言打飞机、贪吃蛇游戏
- 完美世界校招在线笔试题-互联网Java(11月1日)编程题
- 高效Linux用户需要了解的命令行技能
- 北京的女光棍为何有50多万?
- RainyMood 享受漫步在雨中、又不用全身濕透的浪漫,幫助你文思泉湧的雨聲產生器...
- JavaFX常用键盘字符常量
- Linux服务器kswapd0病毒查杀处理
- 免费电子书 of SyncFusion
- 仓库处理中 无法修改_虾皮跨境:Shopee SLS仓库异常件退货流程。附:周三晚开个课。...
- 三星今年将发布首款全网通芯片Exynos 7872