todo

不要点进来

我的blog todo list


  1. Transform + ASM的使用

  1. android手机与电脑通过adb forward方式通信(要求有adb环境,最终建立socket通信,adb负责转发)
  2. android手机与电脑局域网内通信(websocket)
  3. android手机与电脑通过aoa方式通信

https://www.ibm.com/developerworks/cn/java/j-lo-javaio/index.html


  1. 生成带混淆配置的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
  2. Android组件化之通信(多模块,多进程)
  3. Alibaba-ARouter 简单好用的Android页面路由框架
  4. Android开发之PreferenceActivity的使用 https://www.jianshu.com/p/4a65f4a912c6

  1. findbugs使用
  2. RemoteLogcatViewer写个好用的客户端
  3. apt Android关于AutoService、Javapoet讲解
  4. gps addTestProvider
    why getSpeed() always return 0 on android
    Android地理位置服务解析
    Android 使用模拟位置(支持Android 6.0)
  5. x

gradle相关

  1. lib库自带混淆规则
1
2
3
defaultConfig {
consumerProguardFiles 'proguard-rules.pro'
}
1
2
#-----------keep agora -------------------
-keep class io.agora.**{*;}

android上使用linux的进程间通信

Framework笔记 | Android Framework用到了哪些IPC方式,分别在哪里用到
https://cloud.tencent.com/developer/article/1494008

android也是基于linux的,所以理论上linux的IPC通信方式在android上也是可行的。
比如:

  1. AMS和zygote进程是以socket通信。
  2. zygote进程会接受应用进程的“信号”。
  3. 通过Ashmem,APP进程同SurfaceFlinger共用一块内存,这是共享内存的进程间通信方式。
  4. 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的相同点:

  1. 两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。

*res/raw和assets的不同点:

  1. res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename;assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类。
  2. 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