todo
不要点进来
我的blog todo list
- Transform + ASM的使用
- android手机与电脑通过adb forward方式通信(要求有adb环境,最终建立socket通信,adb负责转发)
- android手机与电脑局域网内通信(websocket)
- android手机与电脑通过aoa方式通信
https://www.ibm.com/developerworks/cn/java/j-lo-javaio/index.html
- 生成带混淆配置的aar库(consumerProguardFiles的使用)
https://blog.csdn.net/lihenair/article/details/51671803
http://2bab.me/2017/04/14/gradle-daily-crash-aar-proguard/
https://github.com/AndroidKnife/proguard-config - Android组件化之通信(多模块,多进程)
- Alibaba-ARouter 简单好用的Android页面路由框架
- Android开发之PreferenceActivity的使用 https://www.jianshu.com/p/4a65f4a912c6
- findbugs使用
- 为RemoteLogcatViewer写个好用的客户端
- apt Android关于AutoService、Javapoet讲解
- gps addTestProvider
why getSpeed() always return 0 on android
Android地理位置服务解析
,Android 使用模拟位置(支持Android 6.0) - x
gradle相关
- lib库自带混淆规则
1 | defaultConfig { |
1 | #-----------keep agora ------------------- |
android上使用linux的进程间通信
Framework笔记 | Android Framework用到了哪些IPC方式,分别在哪里用到
https://cloud.tencent.com/developer/article/1494008
android也是基于linux的,所以理论上linux的IPC通信方式在android上也是可行的。
比如:
- AMS和zygote进程是以socket通信。
- zygote进程会接受应用进程的“信号”。
- 通过Ashmem,APP进程同SurfaceFlinger共用一块内存,这是共享内存的进程间通信方式。
- Handler用到管道(android 6.0及以后不用了,改为eventfd)
GLSurfaceView
GLSurfaceView提供了下列特性:
1> 管理一个surface,这个surface就是一块特殊的内存,能直接排版到android的视图view上。
2> 管理一个EGL display,它能让opengl把内容渲染到上述的surface上。
3> 用户自定义渲染器(render)。
4> 让渲染器在独立的线程里运作,和UI线程分离。
5> 支持按需渲染(on-demand)和连续渲染(continuous)。
6> 一些可选工具,如调试。
LeakCanary
https://juejin.im/post/5cc9ab39e51d456e89634a9d
https://square.github.io/leakcanary/changelog/#version-20-2019-11-27
AppWatcherInstaller
InternalAppWatcher
了解app的启动过程,会知道在ActivityThread#handleBindApplication()里会调用installContentProviders()来初始化ContentProvider,然后才回调app.onCreate()。当然这两个操作最终都是在mH里处理的(也就是说在主线程里)。
比如 leakcanary 2.0以后,初始化是通过ContentProvider来实现的(这算是一个小技巧,但这个小技巧不能被乱用。还好leakcanary只在debug模式下用)。
ImageSwitcher
在系统版本5.0以后的前提下,关于startActivityForResult()方法,如果是A跳转B,B的launchMode属性为singleInstance,A的onActivityResult()回调方法会在什么时候调用呢?
Android5.0之前,当启动一个Activity时,系统将首先检查Activity的launchMode,如果为A页面设置为SingleInstance或者B页面设置为singleTask或者singleInstance,则会在LaunchFlags中加入FLAG_ACTIVITY_NEW_TASK标志,而如果含有FLAG_ACTIVITY_NEW_TASK标志的话,onActivityResult将会立即接收到一个cancle的信息。
在Android5.0做出来修改,系统即便启动的页面设置launchMode为singleTask或singleInstance,onActivityResult依旧可以正常工作。
sp
MODE_WORLD_READABLE Deprecated, so 进程间可以用 ContentProvider BroadcastReceiver Service 来通信。
raw
*res/raw和assets的相同点:
- 两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。
*res/raw和assets的不同点:
- res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename;assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类。
- res/raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹
多线程
CountDownLatch AbstractQueuedSynchronizer
CyclicBarrier
Service
【Android】Service那点事儿 https://www.jianshu.com/p/1e49e93c3ec8
被绑定的服务的生命周期
如果一个Service在某个Activity中被调用bindService方法启动,不论bindService被调用几次,Service的onCreate方法只会执行一次,同时onStartCommand方法始终不会调用。
当建立连接后,Service会一直运行,除非调用unbindService来接触绑定、断开连接或调用该Service的Context不存在了(如Activity被Finish——即通过bindService启动的Service的生命周期依附于启动它的Context),系统在这时会自动停止该Service。
破解
https://zhile.io/2018/08/25/jetbrains-license-server-crack.html