
Android
如火也如荼
stay hungery, stay foolish. self control and smart is a new sexy,
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
“一表四图”读懂Android插件化
一、Android插件化发展历程 序号 插件方案名 发布时间 厂商 特点 开源地址 1 dynamicApkLoader 2012年7月 大众点评(屠毅敏) 利用Fragment代理实现页面跳转,首次使用了通过反射AssetManager来调用addAsset()方法实现处理插件中的资源 https://github.com/mmin18/AndroidDynamicLoader 2 dynamic-load-apk 百度(任玉刚) 利用壳Activity来代理实现插件中的Plugin原创 2020-08-08 15:28:04 · 279 阅读 · 0 评论 -
子线程真的不能弹Toast吗?
一、背景: 做Android开发的工程师都知道一条金科玉律(在主线程操作UI的更新与变化)。我们经常在做工程业务的时候,会使用封装的ToastUtils来统一做toast。如下所示: public class ToastUtils{ private static Toast sToast; private static Handler sMainHandler; private ToastUtils(){ throw new UnsupportedOperation原创 2020-05-14 21:00:23 · 710 阅读 · 1 评论 -
SharedPreferences的commit()和apply()区别与剖析
背景:对于Android开发者而言,经常需要在开发中使用SharedPreferences做一些数据的持久化。一般场景是一些标记或者配置数据。 而在针对一些场景到底该使用commit()和apply()中的哪一个来持久化数据的时候,只知道commit是以同步的方式在写数据,可能会造成主线成的卡顿,apply()是异步的写数据,不会造成卡顿。那么实际情况是这样吗?接下来,我们分析一下源码。 【以下SharedPreferences简称SP】 跟踪源代码: 一般我们使用SharedPreferences原创 2020-05-13 15:44:42 · 649 阅读 · 0 评论 -
Dynamic-load-apk插件原理解析
一、背景: 插件化的第一代目,任玉刚大神的dynamic-load-apk。目前插件化的方案主要有以Dynamic-load-apk为代表的的静态代理方案,以及以张勇的DroidPlugin为代表的动态代理hook系统AMS和PM的方案 第一种方案,使用静态代理插件的方案,来代理插件apk中Activity的生命周期管理。 第二种方案,使用动态代理hook系统AMS的方式,来拦截AM...原创 2020-04-26 16:47:29 · 962 阅读 · 0 评论 -
Android编程巧用注解
keep 在编写混淆规则的时候,直接带keep注解的可以在混淆规则脚本中,可以直接如此来keep//比如keep主该cass @keep class Bean{ ... } #保留注解,如果不添加此行会导致我们的@Keep注解失效 -keepattributes *Annotation* -keep @android.support.annotation.Keep class **...原创 2020-04-22 11:19:57 · 353 阅读 · 0 评论 -
Java多线程读写文件
一、背景知识 多线程可以提高任务的执行效率,尤其是CPU计算密集型任务 读写文件是IO密集型任务 过多的线程执行同一个任务,并不一定能提高效率,因为线程切换,需要耗时。再比如IO密集型任务,IO是瓶颈,并不是线程越多,IO会越快。 开多线程去执行任务,需要综合考虑实际情况。 二、问题 最近项目中遇到,安装APK(其中有拷贝apk文件到具体路劲的逻辑),考虑到优化,缩短这里的apk文件拷贝时间。...原创 2020-04-17 20:56:56 · 3411 阅读 · 0 评论 -
Android单元测试
Android单元测试单元测试单元测试理解Java的单元测试Android客户端的单元测试 单元测试 说到测试,主要分为,冒烟测试,集成测试,单元测试。单元测试是保证基础模块、单元工作正常的一种保证手段。在互联网短平快的敏捷开发的开发模式中,常常因为业务繁多,而忽视了单元测试,造成积重难返的局面。编程好比造房子,砖块好比每一个单元,只有保证每一块砖的坚实耐用,才能保证整个房子的坚固可靠。而在业务繁...原创 2019-12-29 18:23:47 · 364 阅读 · 1 评论 -
Glide源码分析
Glide操作 EngineJob中两个线程池: 都是FifoPriorityThreadPoolExecutor 负责缓存decode的DiskCacheService 负责网络请求的 SourceService with() 返回一个 RequestManager (实现了LifeCyleListener,且创建了一个FifoPriorityThreadPoolExecutor) 创...原创 2019-09-19 11:44:02 · 142 阅读 · 0 评论 -
NDK开发sourceSet配置
首先明确两点:Android Studio默认识别的jni目录在app下(此时生成的so在libs目录,所以需要在build.gradle中指明jniLibs.srcDir=['libs']),默认识别的so文件在src/main/jniLibs(这种情况,需要在main下面建立jni目录,但是AS识别不到,所以需要在build.gradle中指定jni目录) externalNativeB...原创 2019-09-18 22:02:47 · 2119 阅读 · 0 评论 -
Gradle笔记(android)
看依赖树 gradlew :app:dependencies 依赖传递:默认依赖传递是true,transitive= true。比如A依赖了B,B依赖了C,C依赖了D。则A会依赖BCD 配置全局的依赖不传递 configurations.all { transitive = false } 配置单个依赖的依赖不传递 androidTestCompile('com.android...原创 2019-09-18 21:40:03 · 210 阅读 · 0 评论