360Replugin插件启动Activity慢导致ANR的问题
来源:互联网 发布:四网合一网站源码 编辑:程序博客网 时间:2024/06/06 01:46
0x01. classloader
打印classloader
try { ClassLoader loader = getClassLoader(); if (loader != null) { LogUtils.e(TAG, ">>><<< loader:" + loader.toString()); loader = loader.getParent(); if (null != loader) { LogUtils.e(TAG, ">>><<< loader:" + loader.toString()); } } } catch (Exception e) { e.printStackTrace(); }
Replugin的classloader信息:插件信息,插件so库信息,系统库信息.
>>><<< loader:com.qihoo360.replugin.PluginDexClassLoader[DexPathList[[zip file "/data/data/com.iamcxl.xxx/app_plugin/Plugin.jar"],nativeLibraryDirectories=[/data/data/com.iamcxl.xxx/app_plugin_libs/Plugin, /vendor/lib, /system/lib]]]
0x02. 四大组件加载慢
日志信息:
09-13 12:02:20.109 7382-7389/com.iamcxl.app I/dalvikvm: threadid=3: reacting to signal 309-13 12:02:20.889 7382-7382/com.iamcxl.app E/xxxxxxx: java.lang.Exception: java.lang.IllegalArgumentException: Receiver not registered: null://省略部分日志...09-13 12:02:20.889 7382-7382/com.iamcxl.app E/xxxxxxx: at com.qihoo360.replugin.component.service.server.PluginServiceServer$1.call(PluginServiceServer.java:107)09-13 12:02:20.889 7382-7382/com.iamcxl.app E/xxxxxxx: at com.qihoo360.replugin.component.service.server.PluginServiceServer$1.call(PluginServiceServer.java:104)09-13 12:02:20.889 7382-7382/com.iamcxl.app E/xxxxxxx: at com.qihoo360.replugin.base.ThreadUtils.syncToMainThread(ThreadUtils.java:50)09-13 12:02:20.889 7382-7382/com.iamcxl.app E/xxxxxxx: at com.qihoo360.replugin.component.service.server.PluginServiceServer.startServiceLocked(PluginServiceServer.java:104)09-13 12:02:20.889 7382-7382/com.iamcxl.app E/xxxxxxx: at com.qihoo360.replugin.component.service.server.PluginServiceServer$Stub.startService(PluginServiceServer.java:514)09-13 12:02:20.889 7382-7382/com.iamcxl.app E/xxxxxxx: at com.qihoo360.replugin.component.service.PluginServiceClient.startService(PluginServiceClient.java:106)09-13 12:02:20.889 7382-7382/com.iamcxl.app E/xxxxxxx: at com.qihoo360.loader2.PluginContext.startService(PluginContext.java:504)09-13 12:02:20.889 7382-7382/com.iamcxl.app E/xxxxxxx: at android.content.ContextWrapper.startService(ContextWrapper.java:494)//省略部分日志...09-13 12:02:20.889 7382-7382/com.iamcxl.app E/xxxxxxx: at com.qihoo360.replugin.component.service.ServiceDispatcher.doConnected(ServiceDispatcher.java:224)09-13 12:02:20.889 7382-7382/com.iamcxl.app E/xxxxxxx: at com.qihoo360.replugin.component.service.ServiceDispatcher$RunConnection.run(ServiceDispatcher.java:241)09-13 12:02:20.894 7382-7382/com.iamcxl.app E/xxxxxxx: at android.os.Handler.handleCallback(Handler.java:733)09-13 12:02:20.894 7382-7382/com.iamcxl.app E/xxxxxxx: at android.os.Handler.dispatchMessage(Handler.java:95)09-13 12:02:20.894 7382-7382/com.iamcxl.app E/xxxxxxx: at android.os.Looper.loop(Looper.java:136)09-13 12:02:20.894 7382-7382/com.iamcxl.app E/xxxxxxx: at android.app.ActivityThread.main(ActivityThread.java:5314)09-13 12:02:20.894 7382-7382/com.iamcxl.app E/xxxxxxx: at java.lang.reflect.Method.invokeNative(Native Method)09-13 12:02:20.894 7382-7382/com.iamcxl.app E/xxxxxxx: at java.lang.reflect.Method.invoke(Method.java:515)09-13 12:02:20.894 7382-7382/com.iamcxl.app E/xxxxxxx: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)09-13 12:02:20.894 7382-7382/com.iamcxl.app E/xxxxxxx: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:680)09-13 12:02:20.894 7382-7382/com.iamcxl.app E/xxxxxxx: at dalvik.system.NativeStart.main(Native Method)09-13 12:02:20.894 7382-7389/com.iamcxl.app I/dalvikvm: Wrote stack traces to '/data/anr/traces.txt'
源码:
启动插件中的Service:
// 启动插件Service。说明见PluginServiceClient的定义 ComponentName startServiceLocked(Intent intent, Messenger client) { intent = cloneIntentLocked(intent); ComponentName cn = intent.getComponent();// ProcessRecord callerPr = retrieveProcessRecordLocked(client); final ServiceRecord sr = retrieveServiceLocked(intent); if (sr == null) { return null; } if (!installServiceIfNeededLocked(sr)) { return null; } sr.startRequested = true; // 加入到列表中,统一管理 mServicesByName.put(cn, sr); if (LOG) { LogDebug.i(PLUGIN_TAG, "PSM.startService(): Start! in=" + intent + "; sr=" + sr); } // 从binder线程post到ui线程,去执行Service的onStartCommand操作 Message message = mHandler.obtainMessage(WHAT_ON_START_COMMAND); Bundle data = new Bundle(); data.putParcelable("intent", intent); message.setData(data); mHandler.sendMessage(message); return cn;}
这里如果第一次启动Service是从工作线程则直接延迟6秒!!!
// 判断是否已加载过Service对象,如无则创建它 private boolean installServiceIfNeededLocked(final ServiceRecord sr) { if (sr.service != null) { return true; } try { Boolean result = ThreadUtils.syncToMainThread(new Callable<Boolean>() { @Override public Boolean call() { return installServiceLocked(sr); } }, 6000);//这里如果不是从主线程启动的service则延迟6秒 if (result == null) { return false; } return result; } catch (Throwable e) { if (LOG) { LogDebug.e(PLUGIN_TAG, "pss.isinl e:", e); } return false; }}
阅读全文
0 0
- 360Replugin插件启动Activity慢导致ANR的问题
- RePlugin的一些问题
- 360家的又一个插件化框架---RePlugin
- 插件化-360的DroidPlugin与RePlugin研究及集成
- 360开源的插件化框架Replugin深度剖析
- 360开源的插件化框架Replugin深度剖析
- maven的jetty插件提示No Transaction manager found导致启动慢的解决方法
- maven的jetty插件提示No Transaction manager found导致启动慢的解决方法
- Maven的Jetty插件提示No Transaction manager found导致启动慢的解决方法
- maven的jetty插件提示No Transaction manager found导致启动慢
- NFS导致的开机启动速度慢
- 可能导致Hypertable启动慢的原因
- 关于centos更新插件fastestmirror 导致更新慢的问题的解决。
- 大牛初步之Oracle服务端安装完后导致的开机启动慢的问题
- 解决程序启动时mysql出现 unauthenticated user导致数据库处理慢的问题
- Android Activity启动慢
- 域名解析慢导致微信授权慢的问题
- sendmail启动慢的问题
- 修改jar包源码
- Spring整合activeMQ
- pcl点云配准二
- javascript中jsonP解决跨域问题
- 快速幂模板
- 360Replugin插件启动Activity慢导致ANR的问题
- SDUT 2235顺序表应用2:多余元素删除之建表算法
- 青云志手游一键服务端 修改教程以及安卓+IOS客户端
- Quant中的那些陷阱
- 将QT程序打包成exe发布
- 攻略计划及申明
- error MSB8026
- 我是死神手游一键端+GM工具+安卓源码
- Oracle数据库学习整理day1