- 博客(10)
- 资源 (11)
- 收藏
- 关注
原创 NativeAllocationRegistry----通过绑定Java对象辅助回收native对象内存的机制
我们平时在开发中有这种需求,java代码中使用了native对象的一个指针,而且需要在java对象回收后,回收相应的native指针,通常我们就是在java对象release的时候,手动调用一下jni方法,将native对象释放,如果java对象被GC回收呢?那么我们就需要NativeAllocationRegistry这个类帮我们解决这个问题其中nGetNativeFinalizer()是一个函数指针}));。
2025-04-03 10:59:37
871
原创 Android性能优化-verifyclass
同事反映说,京东电器界面打开加载慢,我就趁机抓了下trace分析一下这个界面。通过trace,我们可以看到打卡过程主要是下面三个部分耗时较多,第一部分是打卡dex文件(注意这是一个二级页面,理论上不需要加载dex文件,难道是插件化机制?),第二部分里面很多verifyclass,第三部分是加载x5webview。
2023-02-15 14:35:15
1879
3
原创 Android开发中,我们java层崩溃时,虚拟机发生了什么?
1 背景熟悉Android开发的同学都知道,如果我们应用程序中发生了java层的崩溃,我们可以通过下面方式捕获, Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { @Override public void uncaughtException(@NonNull Thread t, @NonNull Throwable e) { Log.i
2021-09-24 17:55:26
1107
原创 art中反优化HDeoptimize
我们知道在Android虚拟机中,虚拟机将dex文件编译成机器码的过程中,首先会将dex文件,转化为IR文件,然后在将IR文件进行优化后,翻译成相应的机器码。其中IR全称是 intermediate representation,是LLVM独创的中间表达式. 经典的compiler架构由前端frontend(读入源代码, 通过词法, 语法与语义分析建立AST), 中端optimizer(优化模块)与backend(通过指令选择, 寄存器分配等阶段最终输出为目标架构的汇编)。HBoundsCheckEli
2021-09-22 12:00:41
617
原创 利用Android9.0虚拟机的JVMTI技术实现一些黑科技
Java生态中有一些非常规的技术,它们能达到一些特别的效果。这些技术的实现原理不去深究的话一般并不是广为人知。这种技术通常被称为黑科技。而这些黑科技中的绝大部分底层都是通过JVMTI实现的。形象地说,JVMTI是Java虚拟机提供的一整套后门。通过这套后门可以对虚拟机方方面面进行监控,分析。甚至干预虚拟机的运行但是Android的ART虚拟机是没有这个功能的,幸...
2020-02-24 14:35:32
4790
原创 Android SDK接口业务和实现分离
几年前,系统厂商在给第三方或者兄弟部门,提供SDK时,大多数方案是提供通用的SDK源码方案。所谓的SDK源码,无非是写了很多文件,定义了很多接口,然后打包成一个jar文件,最后可能对外的接口不混淆,内部实现混淆一下,提供给其他人使用。随着业务的发展,比如说平台越来越多,SDK的最终实现可能都不一样,但是如果还是使用这种方案,是不现实的。 这时,SDK接口业务和实现的分离...
2019-06-05 18:47:25
1354
原创 android9.0 framewrok.jar push到system/framework不起作用,解决方式。
android9.0 framewrok.jar push到system/framework不起作用,解决方式: adb push out/target/product/xxx/system/framework/boot-framework.vdex /system/framework/ adb push out/target/product/xxx/system/framewor...
2019-03-12 16:33:33
4287
7
原创 ANR相关问题分析解决方法
第一章 Android ANR第一节 什么是ANR最直观的情况,当你使用一款Android APP时,系统弹出一个对话框,显示“xx无响应。要将其关闭吗?”。这就是一个应用ANR的场景,你可以选择强制关闭当前应用,也可以等待应用继续执行。在Android中,系统通过显示ANR警示框来保护程序的长时间无响应。类似的警示界面在PC的操作系统中也会见到。第二节 Android UI单线程...
2018-10-26 14:17:37
5002
原创 Android快速启动窗口技术
以Android7.0为例,我们知道Android应用在启动时候,PhoneWindowManager会添加一个空白启动窗口,叫做addStartingWindow,在界面加载完毕后,会removeStartingWindow。 /** {@inheritDoc} */ @Override public View addStartingWindow(IBind...
2018-07-15 10:20:53
1363
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人