启动Java时获取IMSI导致冻屏

来源:互联网 发布:图书管理系统程序算法 编辑:程序博客网 时间:2024/04/28 07:25
启动Java时冻屏,如果此时使用catcher assert手机抓取memory dump发现,JVM task在jvm_get_imsi_XXX()的接口因为kal_retrieve_eg_events()而卡死,多是植入其它native AP导致,请参照如下SOP解决。 
[SOLUTION] 
分析: 
JVM task在调用jvm_get_imsi_XXX()后会使用event挂起自己,同步等待底层返回get IMSI的rsp。该rsp最初由MMI收到,并转发给所有需要的AP。底层的rsp在MMI注册了multiple handler,可以有多个AP注册此类handler,MMI按照register的顺序,依序调用每一个handler(包括Java)。对于multiple handler有一个重要规则,即必须返回false(0),一旦返回非0值(TRUE/void),则其后的其它multiple handler就不会再被调用。 
问题一般发生在某个客制化的AP先于Java注册了IMSI rsp的handler,导致rsp返回MMI时,Java注册的handler不被执行,于是JVM task永远无法等到IMSI的到来而卡死。