记一次简单异常------系统升级后信息概率报错_starttelephonylistener transactnative_程立001的博客-程序员秘密

现象:
本地升级update升级后,提示信息停止运行

堆栈:

04-14 06:42:17.747 2854 3279 E AndroidRuntime: FATAL EXCEPTION: TransactionService
04-14 06:42:17.747 2854 3279 E AndroidRuntime: Process: com.android.mms, PID: 2854
04-14 06:42:17.747 2854 3279 E AndroidRuntime: java.lang.IllegalArgumentException: Unknown URL content://mms/9223372036854775807/part
04-14 06:42:17.747 2854 3279 E AndroidRuntime: at android.content.ContentResolver.delete(ContentResolver.java:1326)
04-14 06:42:17.747 2854 3279 E AndroidRuntime: at com.google.android.mms.util.SqliteWrapper.delete(SqliteWrapper.java:102)
04-14 06:42:17.747 2854 3279 E AndroidRuntime: at com.google.android.mms.pdu.PduPersister.release(PduPersister.java:1652)
04-14 06:42:17.747 2854 3279 E AndroidRuntime: at com.google.android.mms.pdu.PduPersister.getPduPersister(PduPersister.java:301)
04-14 06:42:17.747 2854 3279 E AndroidRuntime: at com.android.mms.transaction.TransactionService.onNewIntent(TransactionService.java:288)
04-14 06:42:17.747 2854 3279 E AndroidRuntime: at com.android.mms.transaction.TransactionService$ServiceHandler.handleMessage(TransactionService.java:696)
04-14 06:42:17.747 2854 3279 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:102)
04-14 06:42:17.747 2854 3279 E AndroidRuntime: at android.os.Looper.loop(Looper.java:148)

从堆栈上看是因为,系统没有加载或公布mms 数据库,为什么?
发生异常的 mms 与正常mms 的区别
异常进程:
04-14 06:41:40.832 1431 1476 I am_proc_start: [0,2854,10022,com.android.mms,added application,com.android.mms]
crash后启动的进程:
04-14 06:42:34.957 1431 2936 I am_proc_start: [0,3723,10022,com.android.mms,restart,com.android.mms]
mms因为在AndroidManifest.xml 添加了persistent 属性,所以在系统启动ActivityManagerService 的systemReady() 方法结尾时去启动apk进程。
android:persistent=”true”
梳理了一下他的代码没有问题。

mms 数据库是谁,是不是他的进程发生了问题?
mms: 4b8e997/com.android.providers.telephony/.MmsProvider
* ContentProviderRecord{4b8e997 u0 com.android.providers.telephony/.MmsProvider}
package=com.android.providers.telephony process=com.android.phone

由此可以看到mms 数据库依据的是com.android.phone

查看com.android.phone当时进程堆栈:

----- pid 2996 at 2017-04-14 06:42:24 -----
 Cmd line: com.android.phone

"main" prio=5 tid=1 Native
  | group="main" sCount=1 dsCount=0 obj=0x754ecf70 self=0x7f8a246a00
  | sysTid=2996 nice=0 cgrp=default sched=0/0 handle=0x7f8ee03fe8
  | state=S schedstat=( 1540944525 3943247345 3555 ) utm=129 stm=25 core=1 HZ=100
  | stack=0x7fd36e6000-0x7fd36e8000 stackSize=8MB
  | held mutexes=
  kernel: (couldn't read /proc/self/task/2996/stack)
  native: #00 pc 00000000000683d0  /system/lib64/libc.so (__ioctl+4)
  native: #01 pc 00000000000723f8  /system/lib64/libc.so (ioctl+100)
  native: #02 pc 000000000002d584  /system/lib64/libbinder.so (_ZN7android14IPCThreadState14talkWithDriverEb+164)
  native: #03 pc 000000000002e050  /system/lib64/libbinder.so (_ZN7android14IPCThreadState15waitForResponseEPNS_6ParcelEPi+104)
  native: #04 pc 000000000002e2c4  /system/lib64/libbinder.so (_ZN7android14IPCThreadState8transactEijRKNS_6ParcelEPS1_j+176)
  native: #05 pc 0000000000025654  /system/lib64/libbinder.so (_ZN7android8BpBinder8transactEjRKNS_6ParcelEPS1_j+64)
  native: #06 pc 00000000000e0988  /system/lib64/libandroid_runtime.so (???)
  native: #07 pc 00000000013ad934  /system/framework/arm64/boot.oat (Java_android_os_BinderProxy_transactNative__ILandroid_os_Parcel_2Landroid_os_Parcel_2I+200)
  at android.os.BinderProxy.transactNative(Native method)
  at android.os.BinderProxy.transact(Binder.java:503)
  at android.content.ContentProviderProxy.call(ContentProviderNative.java:644)
  at android.provider.Settings$NameValueCache.getStringForUser(Settings.java:1415)
  at android.provider.Settings$Global.getStringForUser(Settings.java:8267)
  at android.provider.Settings$Global.getString(Settings.java:8256)
  at android.provider.Settings$Global.getInt(Settings.java:8323)
  at com.android.internal.telephony.cdma.CdmaSubscriptionSourceManager.getDefault(CdmaSubscriptionSourceManager.java:167)
  at com.android.internal.telephony.PhoneFactory.makeDefaultPhone(PhoneFactory.java:130)
  - locked <0x0f659217> (a java.lang.Object)
  at com.android.internal.telephony.PhoneFactory.makeDefaultPhones(PhoneFactory.java:88)
  at com.android.internal.telephony.TelephonyPluginBase.makeDefaultPhones(TelephonyPluginBase.java:46)
  at com.qti.internal.telephony.QtiTelephonyPlugin.makeDefaultPhones(QtiTelephonyPlugin.java:44)
  at com.android.internal.telephony.TelephonyPluginDelegate.makeDefaultPhones(TelephonyPluginDelegate.java:105)
  at com.android.phone.PhoneGlobals.onCreate(PhoneGlobals.java:363)
  at com.android.phone.PhoneApp.onCreate(PhoneApp.java:43)
  at android.app.Instrumentation.0
  (Instrumentation.java:1014)
  at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4885)

系统启动进程加载数据库的流程为:
系统正常启动流程发布provider 的流程为:

ActivityThread.main
ActivityThread.attach
ActivityManagerService.attachApplication
ActivityManagerService.attachApplicationLocked
ActivityManagerService.generateApplicationProvidersLocked   //将已经加载的 ContentProviderRecord,与当前的 ProcessRecord关联起来。
ActivityThread.bindApplication 
ActivityThread.handleBindApplication 
ActivityThread.installContentProviders 
ActivityManagerNative.getDefault().publishContentProviders
apk.Application.onCreate 

ActivityManager: getContentProviderImpl: from caller=null (pid=1075, userId=0) to get content provider com.android.contacts cpr=null

phone 进程启动时间为:
04-14 06:41:41.107 1431 1476 I am_proc_start: [0,2996,1001,com.android.phone,added application,com.android.phone]
异常发生的时间为:
04-14 06:42:17.747 2854 3279 E AndroidRuntime: Process: com.android.mms, PID: 2854
而phone 进程在 06:42:24 的时候,还在走PhoneApp.onCreate 方法
—– pid 2996 at 2017-04-14 06:42:24 —–

系统进行数据库操作,会首先,通过mProviderMap 获取指定的provider,如果没有获取到,那么通过pms获取要加载Providerinfo, 之后会加载对应的apk,
cpi = AppGlobals.getPackageManager(). resolveContentProvider(name, STOCK_PM_FLAGS | PackageManager.GET_URI_PERMISSION_PATTERNS, userId);

而本进程会wait,
等到对应的apk,加载完provider,调用publishContentProviders,去 notifyAll 等待的进程。

所以发生问题,只有
1、mProviderMap 没有对应的 provider
2、pms 中没有获取对应apk信息,需要加载的providerInfo。
由此发生的问题,并且会打印出对应的log:
ActivityManager: getContentProviderImpl: can’t get cpi from packagemanager
那为啥从pms 中获取不到呢?
pms 是比ams 先执行的systemReady啊
缺少当时的log啊,

规避修改,
将sms 改为非常驻进程,确保 sms 使用phone 数据库时,数据库可以准备ok,以此来规避此问题。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xiaolli/article/details/70256604

智能推荐

Navicat 查看密码 破解保存的密码 + 密码解密_nativat 保存密码 文件_CCESARE的博客-程序员秘密

(baidu搜索的文章写的都不全,于是自己总结好写一个)如果想要破解一个已经连接好的数据库密码,可以参考这个方法。一、查看navicat保存的密码1. 进入注册表win + R 输入 regedit 回车2.找到 navicat 中存储的密码HKEY_CURRENT_USER Software PremiumSoft Navicat Servers 点击...

dbms_backup_resotre包实战——(转)rman备份,未使用catalog,控制文件丢失的解决办法_clfbn64004的博客-程序员秘密

情况描述客户报告数据库故障,新来的系统管理员误操作。删掉了一些文件。具体情况是:删掉了所有重要数据文件、所有控制文件。数据库原来是归档模式,用rman备份数据,而rman 使用控制文件。幸运的是,最后一次 rman full 备...

SW练习_POJ1113_凸包_mush_me的博客-程序员秘密

package info.frady.poj;import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.Arrays;import java.util.Comparator;import java.util.LinkedList;import java.util.StringTokenizer;public class POJ1113 { static Point1113 a;.

两列div 右列固定_riancy6的博客-程序员秘密

无标题文档.sidebar{float:right;width:200px;background:#ccc;}.main{overflow:hidden;zoom:1;background:#eee;}rightleftleft

linux网卡下有两个system,求助,网卡接口名被更改systemd-udevd:renamed network inter…..._蕙风如薰的博客-程序员秘密

该楼层疑似违规已被系统折叠隐藏此楼查看此楼邮件列表原文:Since 197 was just tagged and there still seems to be some confusion,here's an FAQ:*** What happens after installing systemd 197?For existing installs: Nothing happens, an...

Linux远程终端模拟登录软件,强大的vim编辑器xshell5_yishimingyue的博客-程序员秘密

对于初学Linux的初学者来说,一款好的工具可以提高编程的效率,在学习Linux时,一般都是在虚拟机下操作,这样还是比较麻烦和不便的,这里推荐一款模拟远程终端的软件xshell5,不仅是强大的vim编辑器,而且还可以对windows下文件用shell命令进行操作,还有很多功能,非常适用于初学者啊。xshell5 官方网址:http://www.netsarang.com/products/xs

随便推点

初学certificate_certificate里不需要什么_rical730的博客-程序员秘密

昨晚刚向朋友请教电子证书和电子证书链的转变是如何完成的,今天就看到了这篇文章。转之。    出道半年多,感觉java要学习好多东西,可是又不知道从何入手? 工作的任务仅仅是维护项目,也仅学到些表面东西,干脆自己研究,把学到的表面东西更加深究。又后来发现如果不结合项目,很容易忘记,所以决定把自己的学习一步步写下来,初次学习,肯定有很多错误和不足的地方,希望大家多多指导。    首先接

2007年百度之星初赛题目 _andylin02的博客-程序员秘密

1.水果开会时段 每个百度工程师团队都有一笔还算丰裕的食品经费,足够每天购置多种水果。水果往往下午送达公司前台。前台的姐姐们只要看到同时出现五种或以上的水果,就称之为“水果开会”。 从搜索引擎切词的语法角度,只要两种水果的名字中有一个字相同就属于同样的类别。例如“小雪梨”和“大雪梨”是同一种水果,而“核桃”和“水蜜桃”也被认为是同一种水果。尤其要指出的是,如果有三种水果x, y, z同时在

Numpy学习总结_numpy总结_xiaoxianerqq的博客-程序员秘密

转自:https://www.cnblogs.com/wj-1314/p/9722794.html一、NumPy简介  其官网是:http://www.numpy.org/  NumPy是Python语言的一个扩充程序库。支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。Numpy内部解除了CPython的GIL(全局解释器锁),运行效率极好,是大量机器学习框架...

Python学习笔记8--Tkinter开发小软件(2)之Pyinstaller_Leige_Smart的博客-程序员秘密

本文将介绍如何使用Pyinstaller将Tkinter开发的界面打包成exe文件,因为涉及到将图片打包进去,所以我们需要先生成spec文件,然后对spec文件做适当修改后再打包。具体步骤如下:生成spec文件使用上一篇文章中写好的py代码,执行以下操作:#在terminal下执行,-F表示把所有的文件都打包在一个exe里面,所以输出只有一个exe,其他参数可以自行百度pyi-makespec -F gui2.py在spec文件中添加图片路径在默认生成的spec文件中增加这样一行,即图片的

二维曲线 去噪点 c++_二维介孔聚吡咯-氧化石墨烯异质结用于制备无枝晶的锂金属负极..._weixin_39725594的博客-程序员秘密

▲第一作者:石浩东,秦洁琼;通讯作者:吴忠帅通讯单位:中国科学院大连化学物理研究所论文DOI:10.1002/anie.202004284全文速览近日,中国科学院大连化学物理研究所吴忠帅研究员等人采用硬模板策略,合成了均匀生长在有缺陷的氧化石墨烯(GO)的介孔聚吡咯(mPPy)的二维异质结构(mPPy-GO),并用它作为双功能的锂离子再分配器,实现锂离子的均匀沉积,从而获得很稳定的无枝晶锂金属负极...

用看板工具leangoo做需求管理,公开看板分享_哆啦B梦_的博客-程序员秘密

https://www.leangoo.com/kanban/board/go/2808232把你的想法告诉我?或者把你的看板分享出来。。你是怎么管需求的