一、性能优化
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 知识体系
最新推荐文章于 2023-04-18 09:55:26 发布