Android 知识体系
2016-03-18 19:16
656 查看
一、性能优化 1、布局优化 减少层次,view数量,ReleativeLayout和LinearLayout(weight)选择,viewstub,merge,include 2、代码优化 a、防止内存泄露(使用弱引用代替) b、性能检测工具(DDMS,MAT,TracceView,HeryLayout) c、bitmap,采样压缩,尽量使用drawable,使用弱引用缓存 d、效率优化 比如HashMap遍历可以采用迭代器 3、网络优化 a、使用gzip压缩,json代替xml,减少请求次数 二、安全机制 1、代码混淆,对抗dex2jar(特殊代码块是jd-gui工具无法查看) 2、对抗动态调试 2.1、在配置文件加入debuggable=true让程序不可调试,在代码中进行判断,杀死进程 2.2、检测模拟器 检测checkqemu的值是否为1,正常手机没有。、 3、防止重新编译 3.1、检测软件签名,获取signatures字段的值的hash 3.2、校验保护,可对dex的md5,hash,crc进行校验,每次编译crc都会改变。 4、加壳保护 Util类通过MyClassLoader完成对加密classes.jar的动态加载,内存中解密classes.jar,完成动态加载。 jni方法对应so函数名的混淆,在JNI_OnLoad方法中手动注册jni方法,不易查找对应关系。 抗动态调试: 当使用IDA动态调试该程序时,程序无法建立连接调试。 5、权限机制 5.1、每一个应用程序运行有一个uid,gid,使应用程序直接隔离,不能访问。如果要访问,通过androidapi,或者shareUserId 5.2、权限分为普通、危险、签名和系统签名级别, 5.3、组件权限:为组件设定权限,要启动就要有权限。 三、基础 3.1、源码角度分析 a、view的绘制流程,viewgroup事件传递流程 b、handler机制,looper,message,消息队列,HandlerThread(保证looper和handler同步,ThreadLocal相当于Map<threadId,Looper>) c、 3.2、Fragment汇总 a、fragment之间数据传递 b、startActivityForResult接收不到数据 3.3、屏幕适配 多使用weight,创建多个不同的布局文件(平板和手机双面板布局),Google百分比布局 3.4 Activity解析机制 intent-filter(凡是指定的都必须有,action->data->categroy) 3.5、打包流程 四、第三方框架/架构 4.1、插件化机制 a、替换getResource,通过AssetManager反射addAssetPath执行dex中的方法 。 addAssetPath.invoke(assetManager, dexPath); 通过assetManager创建出Resources。 b、重写getResources()方法,【Activity->ContextWrapper->Context(抽象类,实现者ContextImpl)】,替换其值。 c、使用代理的模式去管理activity声明周期。 4.2、ImageLoader框架 a、bitmap强引用 4.3、Xutils框架 a、BitMapUtils b、ViewUtils 4.4、GreenDao 4.5、MVC,MVP,MVVM架构 4.6、EventBus框架 五、java 5.1、内存模型 a、堆和栈 b、如何停止线程:使用标志字段,但对于阻塞线程(sleep)不起作用。可以调用线程interrupt方法,阻塞线程会抛出interruptException,在结合volatile关键字修饰字段可以解决。 c、volatile对所有线程具有可见性,一个线程对其修改,其他线程可以获取修改的值。 d、 5.2、java和android虚拟机原理 5.3、多线程并发 synchronized,lock锁(需要手动释放锁),信号灯Semaphore 5.4、网络编程 六、设计模式 单例, 模板方法, 适配器, 观察者, 工厂方法, 代理模式 七、数据结构
相关文章推荐
- android socket实现文件导出功能
- 搭建高质量的Android项目框架系列四
- 关于SQLite在Android开发中的知识点总结
- Android 线程模型
- 复习android 的大喇叭~~~
- 搭建高质量的Android项目框架系列三
- Android遇到No external storage available
- 搭建高质量的Android项目框架系列二
- bug_ _ android.view.WindowManager$BadTokenException: Unable to add window -- token
- Android 的画布Canvas和画笔Paint
- android日志打印代码 logcat
- 搭建高质量的Android项目框架系列一
- Android Studio Gradle Configuration Errors总结
- Android Studio Gradle Configuration Errors总结
- Android Studio Gradle Configuration Errors总结
- Android 官方分辨率详解
- Android之EventBus使用详解
- Activity启动过程全解析
- android中关于 button有三种状态的设置 enabled的设置
- Android activity动画跳转案例分析