自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(17)
  • 资源 (1)
  • 收藏
  • 关注

原创 编译插桩,native hook

一、编译插桩三剑客Dagger、ButterKnife 这些 APT(Annotation Processing Tool)注解生成框架,是基于Java文件实现的,其他的则是基于字节码实现的。AspectJ 和 ASM 框架的输入和输出都是 Class 文件,它们是我们最常用的 Java 字节码处理框架。1、AspectJ 功能强大而且使用非常简单,使用者完全不需要理解任何 Java 字节码相关的知识,就可以使用自如。它可以在方法(包括构造方法)被调用的位置、在方法体(包括构造方法)的内部、

2020-06-18 11:04:36 475

转载 安卓知识总结---(安卓基础)

1、安卓基础的一些盲点,比如handler,线程之间的通信,绘制的流程,事件分发

2020-06-16 17:07:47 640

原创 Java基础之多线程编程

一、线程状态切换线程数量多少合适:CPU密集型一般是等于CPU内核数,IO密集型是根据阻塞系数,比如空闲率50%的IO密集的任务,线程数一般是CPU核心数的两倍为什么不能用stop来停止线程:stop方法会清除栈内信息,结束该线程,这也就导致了run方法的逻辑不完整,输出语句println代表的是一段逻辑,可能非常重要,比如子线程的主逻辑、资源回收、情景初始化等,但是因为stop线程了,这些就都不再执行,于是就产生了业务逻辑不完整的情况。stop方法会破坏原子逻辑多线程为了解决共

2020-06-13 14:55:09 195

原创 安卓知识总结---(安卓技术架构)

来源:微信:https://mp.weixin.qq.com/s/W38aauoCEEUbL8KvUkb_Rw?https://mp.weixin.qq.com/s/6Q818XA5FaHd7jJMFBG60w阿里:https://mp.weixin.qq.com/s/twfpUMf9CfXcgwtFFkJ4Ig支付宝:https://mp.weixin.qq.com/s/eXzojM0lCaaCW4JxBaU6BQ美团:https://tech.meituan.com/2018/...

2020-05-17 21:35:54 204

原创 Flutter性能优化

一、保证flutter的流畅度1、利用RepaintBoundary,提高build效率,降低Widget tree遍历的出发点,将setState刷新数据尽量下发到底层节点2、提高paint的效率,为经常发生显示变化的内容提供一个新的隔离layer,新的layer paint不会影响到其他layer3、减少build中逻辑处理,因为widget在页面刷新的过程中随时会通过build重建,build调用频繁,我们应该只处理跟UI相关的逻辑4、减少saveLayer(ShaderMask、Co

2020-05-15 16:01:15 1485

原创 安卓动态化实践概览---虚拟运行环境

一、React Native和flutterflutter的效率比React的效率要高,Flutter 是一个性能和效率至上,但是动态化能力非常有限的框架二、flutter热加载原理分析首先_updateDevFS()会将工程中文件逐一扫描,检查是否有删除、新增或者改动,扫描完成后,生成kernel files,命名为app.dill.incremental.dill文件,通过HTTP端口发送给DartVM; 将扫描生成的.dill文件路径,通过RPC接口调用_reloadSources,

2020-05-14 15:31:49 316

原创 安卓动态化实践概览---插件化

前言:热修复框架应该也属于业务插件化的一种类型一、插件化的实现原理1、加载class,通过DexClassLoader,分为单DexClassLoader与多DexClassLoader,对于每个插件都会生成一个DexClassLoader,当加载该插件中的类时需要通过对应DexClassLoader加载。这样不同插件的类是隔离的,当不同插件引用了同一个类库的不同版本时,不会出问题,RePlugin采用的就是此方案。将插件的DexClassLoader中的pathList合并到主工程的Dex

2020-05-14 14:12:41 293

原创 安卓动态化实践概览

来源:美团:https://tech.meituan.com/2017/10/12/android-hydra.html转载腾讯bugly:https://www.jianshu.com/p/0a2501328e0e

2020-05-13 15:04:32 429

原创 安卓知识总结---性能篇(安装包优化)

一、安装包瘦身1、删除无用资源2、字符串编码,为了节省空间,resources.arsc中的会有一个去重过的字符串资源池,当然如果你发现使用UTF-8后resources.arsc反而变大,你可以强制使用UTF-16编码3、C++运行时库统一使用stlport_shared,使用stlport_shared方式可减小APK包大小,相当于把大家公有的代码提取出来放一份,减少冗余。同时也会节省一点内存,加载so的时候动态库只会加载一次,静态库则随着so的加载被加载多份内存映像4、资源混淆,5

2020-05-13 10:26:53 178

原创 安卓知识总结---性能篇(崩溃优化)

一、崩溃的捕获1、Java catchException2、native崩溃,编译是上传符号文件到服务器,获取dump日志后分析3、anr异常,使用 FileObserver 监听 /data/anr/traces.txt 的变化,高版本不支持,可以用微信Hardcoder,来源腾讯bugly:https://mp.weixin.qq.com/s/g-WzYF3wWAljok1XjPoo7w?https://mp.weixin.qq.com/s?__biz=MzAxMzYyNDkyN

2020-05-12 16:48:09 172

原创 安卓知识总结---性能篇(网络优化)

一、如何监控网络和流量1、系统和 OkHttp 网络库 ---- 插桩:360 开源的性能监控工具ArgusAPM就是利用 Aspect 切换插桩关于 OkHttp 的拦截可以参考OkHttp3Aspect2、其他的自研的网络库 ------ Native Hook我们直接 PLT Hook 内存的所有 so,但是需要排除掉 Socket 函数本身所在的 libc.so,这种做法不好的地方在于会把系统的 Local Socket 也同时接管了,需要在代码中增加过滤条件3、客户..

2020-05-12 12:26:58 207

原创 安卓知识总结---性能篇(启动优化)

一、怎么记录安卓app的启动速度1)Android Profiler,可以设置从启动开始监控,得到cpu内存等信息2)Perfetto UI,开发者模式新增加了一个“系统跟踪”的功能,只有安卓10可以用3)MethodTracingDebug.startMethodTracing() 和 stopMethodTracing() 方法来开始和结束 Tracing。Traceview打开4)profilo可以做线上监控二、启动优化方法1、I/O 优化启动过程不建议出现网络 I/O..

2020-05-11 23:55:45 727

原创 安卓知识总结---(常用开源框架和原理)

glide:1、Glide的加载顺序是先从内存中获取,若没有则从磁盘中获取,在没有则通过网络获取。从网络上获取到了图片之后若设置了可缓存,则会缓存到磁盘中;然后在通过相应的加载参数进行解码压缩裁剪等操作之后得到图片设置给ImageView,同时缓存到内存中。Lru缓存2、创建一个透明的 RequestManagerFragment 加入到FragmentManager 之中,通过添加的这个 Fragment 感知 Activity 、Fragment 的生命周期。3、Glide在开始加载图片时,

2020-05-11 22:08:55 518

原创 安卓知识总结---(设计模式)

一、单例模式经典的写法:饿汉,懒汉,双重锁,静态内部类,枚举和容器双重锁静态内部类(推荐)二、Builder模式使用场景:创造复杂对象的创建型模式,安卓源码示例:AlertDialog.builder三、策略模式使用场景:定义不同的算法安卓源码示例:动画的时间插值器,动画的匀速、加速等四、责任链模式使用场景:多个对象可以处理同一个请求,但具体由哪个对象处理运行动态决定安卓源码示例:ViewGroup 的dispatchTouchEvent五、观察者

2020-05-11 21:30:18 131

原创 安卓知识总结---性能篇(卡顿优化)

一、卡顿产生的原因界面布局重复绘制,GPU和CPU耗时,频繁GC,二、卡顿的监控1)、blockCanary --基于消息队列实现2)、Choreographer回调 --间接统计两次 Vsync 事件的时间间隔3)、插桩 --1、Debug.startMethodTracing,在应用启动时,默认打开 Trace 功能应用内所有函数在执行前后将会经过该函数,基于反射,在兼容性和安全性上存在一定的风险2、Matrix-TraceCanary -- 修改字节-码的方式,在编...

2020-05-11 17:10:34 198

原创 安卓知识总结---性能篇(内存优化)

一、内存泄漏的原因Activity 的泄漏、Cursor 未关闭、线程的过度使用、无节制的创建缓存、以及某个 so 库悄无声息一点点的泄漏内存一、检测内存泄漏1)Java内存泄漏1、LeakCanary Activity 泄露检测--(原理:弱引用监测,activity onDestory是否被释放)2、Bitmap分配及回收追踪 -- (原理:所有被创建出来得Bitmap加入weakHashMap)3、代码扫描 -- (打开文件没有关闭,注册事件没有释放)4、线程数量监控 -.

2020-05-11 16:35:01 147

原创 Small 插件化小白教程,从入门到放弃系列(入门篇)

撸一个small框架,首先丢上Small 官网的地址:GitHub官网教程 地址:http://code.wequick.net/Small/cn/quickstart,应该根据small的简单入门教程一步步来搭我们的框架,但是这个small的教程实在是太久没有更新了,所以使用的过程中,版本冲突非常的多,解决起来很烦人,由此记录一下踩坑之路~一、创建一个正常的安卓工程,并且集成small...

2019-11-24 23:55:34 1147 1

我的学习笔记

我的c++ primer读书总结,可能会有朋友觉得书里的知识太多,而我看了一遍这本书,总结了大部分基本的知识点,用来面试和找工作。

2015-08-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除