【系统】拨号盘界面,插双卡呼出号码后,再拔卡再插卡,重复操作几次界面卡住,之后出现重启
1 Line 381: "SIM Service - 0" prio=5 tid=12
Native Line 415: "SIM Service - 0" prio=5 tid=15
Native Line 474: "SIM Service - 0" prio=5 tid=17
Native Line 508: "SIM Service - 0" prio=5 tid=18
Native Line 542: "SIM Service - 1" prio=5 tid=20
Native Line 576: "SIM Service - 0" prio=5 tid=19
Native Line 610: "SIM Service - 0" prio=5 tid=21
Native Line 644: "SIM Service - 1" prio=5 tid=23
Native Line 678: "SIM Service - 0" prio=5 tid=22
Native Line 712: "SIM Service - 0" prio=5 tid=24
Native Line 746: "SIM Service - 0" prio=5 tid=25
Native Line 780: "SIM Service - 1" prio=5 tid=27
Native Line 814: "SIM Service - 0" prio=5 tid=26
Native Line 873: "SIM Service - 1" prio=5 tid=30
Native Line 907: "SIM Service - 0" prio=5 tid=28
Native Line 941: "SIM Service - 1" prio=5 tid=31 Native
的确启动了很多的线程,但是线程名字一直在0和1之间,没有超过2,说明每次启动基本都是在前个Sim Service执行完毕销毁的情况下重新启动的。
那么说明service最多挂起了一个client访问,此种情况不应该导致binder耗尽;
需要查看SIM Service的启动时间来证明:从Log来看查询次数还可以,不是特别的频繁,一分钟查询2--4次,关键要看下importProcessor的start的次数和处理完毕后log打印次数是不是一致的?
1 循环创建10个processor查看threadName 是不是逐渐增长的?
2 查看importProcessor的创建次数和结束后的打印Log是不是保持一致的?是不是有没有结束的thread然后又启动了新的importProcessor?
解决方案:
1 将ServiceManager中的processor cotainer设为静态,当存在未完成的import thread则不执行新的processor,最多存储两个thread,一个在执行一个在等待前面执行的import可能不一定全面,所以后面再执行一次也是合理的
经查看发现在createProcessor的时候有判断当前同类型的processor是否在执行,如果正在执行不会发起新的请求但是从Log中又发现启动的importProcessor和结束的importProcessor数量不同,
代表有些importProcessor没有执行完毕NamePhoneTypePair(String nameWithPhoneType)空指针问题之前创建的线程比如tid=72的和tid=73的几乎同时触发,
但是72,73都调用IccProvider查询后只有73执行了查询操作,72停留住了,后面也没有处理, 看样子是一直卡住了,
Executor在shutdown的时候也没有将其关闭,导致一直hold binder
网友评论