【系统】拨号盘界面,插双卡呼出号码后,再拔卡再插卡,重复操作几次

2018-05-23  本文已影响2人  平头说人生

【系统】拨号盘界面,插双卡呼出号码后,再拔卡再插卡,重复操作几次界面卡住,之后出现重启

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

上一篇下一篇

猜你喜欢

热点阅读