- 博客(7)
- 资源 (10)
- 收藏
- 关注
转载 App的启动过程
App的启动过程简单解释一下App的启动过程:1.点击Launcher,启动程序,通知ActivityManagerService2.ActivityManagerService通知zygote进程孵化出应用进程,分配内存空间等3.执行该应用ActivityThread的main()方法4.应用程序通知ActivityManagerService它已经启动,
2018-01-31 14:42:28 309
原创 AndroidApp启动时间查询
1.启动时间统计从点击应用的启动图标开始创建出一个新的进程直到我们看到了界面的第一帧,这段时间就是应用的启动时间。我们要测量的也就是这段时间,测量这段时间可以通过adb shell命令的方式进行测量,这种方法测量的最为精确,命令为:1.1 利用adb查看启动时间adb shell am start -W [PackageName]/[PackageName.MainActivi
2018-01-31 14:38:32 3081
原创 SparseArray介绍
结构方面:它内部则是通过两个数组来进行数据存储的,一个存储key,另外一个存储value,为了优化性能,它内部对数据还采取了压缩的方式来表示稀疏数组的数据只是觉得SparseArray比HashMap更省内存, 至于存储效率, 只能说在特定情况下才能比hash快(很有限, 比如顺序插入).限制方面:SparseArray只能存储key为int类型的数据查找用的是2分法.
2018-01-31 11:12:34 257
转载 hashmap的原理
转自:简单介绍:(1)由一个数组+若干个链表组成(2)put计算hash值对key的hashcode进一步计算,确保散列均匀,得到2次hash值根据2次hash值和数组长度计算出真正的存储位置存储,新增一个entry, 把这个entry放到数组中.(当size超过临界阈值threshold,并且即将发生哈希冲突时进行扩容)注:扩容一定是2的次
2018-01-30 17:26:14 175
转载 关于android字节码插桩
转自:https://www.jianshu.com/p/c202853059b4基于字节码插桩可以实现面向切面的编程, 实际是在字节码中插入要执行的相关程序. 通过非侵入的方式实现切面编程.(1)AOP和OOP如果说oop模块化编程, 是把功能封装到一个模块中, 那么aop就是把众多模块中的问题, 集中到一起管理.(2)运行时AOP和编译时AOP编译时AOP主要是在Apk打包
2018-01-30 11:39:57 1365
原创 关于small插件化版本的使用
终于可以编译通过, 明天上过程和坑.1. 依赖于gradle的版本, 我用的是com.android.tools.build:gradle:2.1.32. 从jcenter下载失败, 使用jcenter(){url 'http://jcenter.bintray.com/'}代替jcenter()3. gradlew buildLib gradlew buildBundle这两部之后,
2018-01-04 23:25:37 315
原创 集成CEF的坑和解决办法
1.把CEF封装成一个dll. 在调用程序退出的时候, 调用CefShutdown就崩溃?解决办法: 把cef相关的库, 换成release版本试试. 2.调用dll时, 程序崩溃提示livcef.dll模块加载失败?看看资源文件是不是粘贴过来了.3.cef启动后一直白屏解决方法:查看在CefInitialize()之前是否有应用程序创建实例代码,把cef初始化程序放在创建...
2018-01-03 16:44:15 7465
dagger2的所有用法
2018-03-08
AndroidStudio利用DiskLruCache和LruCache实现简单的照片墙
2017-11-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人