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 3
09-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>() {@Overridepublic 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;}
}

360Replugin插件启动Activity慢导致ANR的问题相关推荐

  1. (4.6.29.3)插件化之代码加载:启动Activity等四大组件之hook方式

    文章目录 一.代理模式和Hook原理 1.1 Hook 原理 1.2 代理模式 二.Binder Hook 2.1 分析:系统服务的获取过程 2.2 寻找Hook点 2.3 hook Binder示例 ...

  2. HOOK技术四-插件中Activity启动实战

    系列文章 HOOK技术一-HOOK技术初探 HOOK技术二-未注册Activity的启动 HOOK技术三-插件Activity启动前提分析 HOOK技术四-插件中Activity启动实战 HOOK技术 ...

  3. 插件化Activity: 技术方案分享

    改不完的 Bug,写不完的矫情.公众号 杨正友 现在专注移动基础开发 ,涵盖音视频和 APM,信息安全等各个知识领域:只做全网最 Geek 的公众号,欢迎您的关注! 前言 插件化技术从 2015 年就 ...

  4. android webview anr,Android WebView客户端导致ANR

    我正在实现一个客户端库到OAUTH API.在认证过程中,webview客户端会启动并加载认证页面的URL.但是,webview客户端有时可以正确启动,但最近开始导致ANR.Android WebVi ...

  5. Android 进阶——性能优化之因Handler引起句柄泄漏导致ANR的定位和解决

    文章大纲 引言 一.场景重现 二.ANR 1.ANR概述 2.ANR 的主要类型 3.在Android中默认场景限制(超出就会ANR): 4.当应用程序的UI线程响应超时才会引起ANR 的原因 5.A ...

  6. SpringBoot 项目tomcat插件启动报错 java.lang.NoClassDefFoundError: javax/el/ELManager

    问题描述: SpringBoot项目 tomcat插件启动出现下面的问题: ERROR 2021-04-07 08:42:03,129 org.springframework.boot.SpringA ...

  7. android4.0 开机启动activity 4.0,如何正确理解和使用Activity的4种启动模式

    关于Activity启动模式的文章已经很多,但有的文章写得过于简单,有的则过于注重细节,本文想取一个折中,只关注最重要和最常用的概念,原理和使用方法,便于读者正确应用. Activity的启动模式有4 ...

  8. Android 4.2 通知通过PendingIntent启动Activity失败的问题

    今天突然发现在Android 4.2手机上点击通知消息无法打开Activity的问题,具体Logcat信息如下: 01-09 11:37:43.733: WARN/ActivityManager(92 ...

  9. Android移动APP开发笔记——Cordova(PhoneGap)通过CordovaPlugin插件调用 Activity 实例...

    引言 Cordova(PhoneGap)採用的是HTML5+JavaScript混合模式来开发移动手机APP.因此当页面须要获取手机内部某些信息时(比如:联系人信息,坐标定位.短信等),程序就须要调用 ...

最新文章

  1. POJ 2828-Buy Tickets(线段树上二分)
  2. 计算机专业在线家教,基于SSM框架的家教平台设计与实现计算机专业.doc-原创力文档...
  3. python学习费用-深圳python学习费用多少
  4. java 抽象类继承抽象类_Java之继承、抽象类、接口篇
  5. HALCON基础知识
  6. sublime text全程指南【转载】
  7. Python3实现红黑树[上篇]
  8. 基于生成对抗网络的医学数据域适应研究
  9. C++语言基础 —— STL —— 容器与迭代器 —— map 与 multimap
  10. 外链引入css有哪些方式_外链怎么发才会快速收录?
  11. 7-2 修理牧场 (25 分)
  12. Linux问题---------E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)
  13. 利用kali下的msfvenom入侵电脑
  14. Android 11.0 12.0拨打接听电话默认开启免提
  15. ios+html+音频播放器代码,音频播放器代码 - 代码大全
  16. mysql 数据恢复软件_Recovery Toolbox for MySQL(MySQL数据库修复软件)
  17. libpcap简介及网络监测系统
  18. Android M 六大新特性
  19. Named Route index has a default child route. When navigating to this named route to name index
  20. linux gic驱动

热门文章

  1. Advancedinstaller安装包自定义操作打开文件
  2. 关于FANUC机器人使用U盘备份文件失败的问题总结
  3. PAC脚本语法(代理自动配置)
  4. c语言程序 三角形问题,[求助]C语言问题(定义三角形结构)
  5. Installation failed due to: ‘-99‘ OPPO手机
  6. 如何使用Gulp完成项目的自动化构建
  7. 〖产品思维训练白宝书 - 产品思维认知篇③〗- 产品思维 VS 技术思维
  8. 乐迪(RadioLink)Mini Pix组装六旋翼无人机疑难杂症解决1——只有4个电机转
  9. 计算机基础容量单位,计算机容量的基本单位是什么
  10. java中display1,CSS Display(显示)