--- Framework 解决实际问题 --- 1. 你有没有解决复杂问题的实践经验 2. 你有没有深入研究底层原理的习惯 3. 你的知识体系是否有一定深度 #### 应用组件 1. 想了解一下为什么 Activity 在 onResume 之后才会显示出来 2. bindService 的时候 onRebind 总是调不到,研究原理 3. 广播 onReceiver 的 context 可否启动 Activity,显示 Dialog? 4. 发现 provider 的 onCreate 比 Application 还早,研究一下 #### 消息通信 1. intent 带的数据量大了会异常,研究原因 2. 需要跨进程传大图,研究 Bitmap 传输原理,Ashmem 机制 3. 想知道 Handler 消息延时的精度怎么样,去了解原理 4. 为什么有时候 IdleHandler 调不到,去了解原理 #### 性能优化 1. ANR 了,看主线程有没有耗时任务 2. 卡断掉帧,了解屏幕刷新机制 3. 启动速度优化,了解应用启动原理 4. 内存优化,清理不必要的资源 ```java public class Resources{ private static final LongSparseArray[] sPreloadedDrawables; private static final LongSparseArray sPreloadedColorDrawableds = new LongSparseArray<>(); private static final LongSparseArray> sPreloadedColorStateLists = new LongSparseArray<>(); } public static void main(String argvp[]){ registerZygoteSocket(socketName); preload(); if(startSystemServer){ startSystemServer(abiList, socketName); } runSelectLoop(abiList); closeServerSocket(); } static void preload(){ preloadClasses(); preloadResources(); preloadOpenGL(); preloadSharedLibraries(); preloadTextResources(); WebViewFactory.prepareWebViewInZygote(); } private static void preloadResources(){ mResources.startPreloading(); if(PRELOAD_RESOURCES){ preloadDrawables(runtime, ar); preloadColorStateLists(runtime, ar); } mResources.finishPreloading(); } private static int preloadDrawables(VMRuntime runtime, TypedArray ar){ int N = ar.length(); for(int i=0;i