载录自:https://developer.android.google.cn
多线程
- Processes and Application Lifecycle
- 进程和线程
- 进程
- 进程生命周期
- 线程
- 工作线程 >> AsyncTask
- 线程安全方法
- 进程间通信
- 进程
- Sending operations to multiple threads
- Specify the code to run on a thread >> Runnable
- Create a manager for multiple threads >> IntentService / ThreadPoolExecutor
- Run code on a thread pool thread
- Communicate with the UI thread >> Handler
- Better performance through threading
补充内容
机制原理走读:
- AsyncTask、IntentService、HandlerThread、ThreadPoolExector
- Handler
Handler机制
Looper >> MessageQueue >> Message >> Handler >> Looper
AsyncTask
WorkRunnable + FutureTask + SerialExecutor(默认串行) = ThreadPoolExector + Handler
ThreadPoolExector
IntentService
数据储存
- Storage overview
- SharedPreferences
- 内部存储 >> 默认是应用的私有文件
- 外部存储 >> getExternalStorageState()
- 数据库 >> sqlite3 >> Room框架
- 网络存储
补充内容
常用API走读:
- File / FileProvider
- SQLiteOpenHelper / Room ORM
网络编程
- Performing network operations
- Connect to the network >> HttpsURLConnection / AsyncTask
- Manage network usage
- Optimize network data usage
- Parse XML data
- Volley overview >> 适用数据量小、通信频繁的网络操作。/ 图片加载
补充内容
机制原理走读:
-
HttpURLConnection / HttpsURLConnection
-
volley、okhttp等常用框架走读
-
Http、Socket、TCP/IP
NDK开发
自定义View
- Android自定义View注意事项
- Android自定义View之Canvas
- Android自定义View之Paint绘制文字和线
- Android自定义View之Window、ViewRootImpl和View的三大流程
- Android自定义View之双缓冲机制和SurfaceView
- Android自定义View之事件分发机制总结
AS 调试手段
- Crashes
- Java (Throwable) >> 空值、传参非法、复杂的多线程交互 >> stack trace >> 问题复现
- Memory errors >> OutOfMemoryError >> 开一个低内存的模拟器
- Networking exceptions >> UnknownHostException >> emulator 模拟延时,或者切换成飞行模式等
- Diagnosing native crashes (signal)
- null指针、tombstone >> addr2line、vmlinux
- Java (Throwable) >> 空值、传参非法、复杂的多线程交互 >> stack trace >> 问题复现
- ANRs
- 触发条件:
- 在前台的Activity中,input event超过5s没有响应或者 BroadcastReceiver在10s内尚未执行完毕。
- Activity不在前台时,BroadcastReceiver在一定的时间内仍未处理完成。
- Diagnosing ANRs
- 主线程中,进行耗时的 I/O操作 >> Strict mode
- 主线程中,进行比较耗时的计算 >> Enable background ANR dialogs、Traceview、Pull a traces file
- 主线程中,同步等待Binder返回调用情况,而这个调用又是比较耗时的。
- 主线程中,同步阻塞等待一个操作,而这个操作又是在其他线程中完成。
- 主线程和其他线程发生了死锁。
- Fix the problems
- Slow code on the main thread >> trace中具体分析超过5s的内容
- IO on the main thread >> network、I/O操作,统一放到工作线程中。
- Lock contention / Deadlocks >> mutex hold
- Slow broadcast receivers >> IntentService >> 工作线程
- 触发条件:
- 内存泄漏
trace 分析:
step1. 若对自己开发的应用做 trace分析的话,可以在代码中增加 trace跟踪接口。具体参考:Generate Trace Logs by Instrumenting Your App
step2. 若是对以发生 ANR的应用进行 trace分析的话,一般直接取出 /data/anr/anr*文件
step3. 利用 Traceview进行 trace分析。具体参考:Inspect trace logs with Traceview