感谢无限的网络资源,我这里只是资源的搬运者。
1.布局xml文件中使用include,merge,ViewStub。ViewGroup的层数,相对布局的使用便于适配。
2.常量使用static final进行修饰。
3.String,StringBuffer(线程安全),StringBuilder(线程不安全,效率高)。
4.Bitmap使用后调用recycle()再置空。网上说API 9(Android 2.3)之前,Bitmap的对象由java和C/C++两部分构成,只置空不recycle()不能回收C++管理的部分。API 9之后就可以了。个人认为多写一句recycle()无妨。
5.使用各种连接之后在finally中进行close(),注册过的东西,不使用时进行销毁。
6.如果单例模式中使用了Context的引用,一定要注意这个Context的生命周期。因为单例的周期是整个应用的周期,这里的Context如果是Application则没有问题,如果是Activity的话就会造成Activity退出时不会被GC。
7.了解Handler与Message和MessageQueue的关系以及其生命周期,避免使用不当产生OOM。将内部类改为静态内部类,静态内部类中使用弱引用来引用外部类的成员变量。因为如果消息是延迟发送的话,即使Activity销毁了也不能及时被GC,因为未发送的消息持用Handler的引用,进而使持有内部类Handler的外部类不能GC。Handler 的持有的引用对象最好使用弱引用,资源释放时也可以清空 Handler 里面的消息。
8.尽量避免使用static成员变量,因为static的生命周期与应用的生命周期一直。
9.异步线程的内部类实现,也会导致OOM。
10.了解四大引用与GC的关系。
11.ArrayList, LinkedList的区别。
12.如果有使用到ListView的注意Item的缓存。
13.APK瘦身:res中的图片文件压缩,以及删掉不用的文件。代码混搅(使用框架时,注意混搅可能产生问题)。
14.DNS优化,www.xxxx.com/api/xxx/xx写成127.1.1.1的形式,可以少一个域名解析的过程(看个人需求,因为如果使用域名,服务端换IP不会对App产生影响)。
15.使用线程池(newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor)进行Thread操作。
16.handler.obtainMessage()复用message。
17.http重复请求的次数,以及文件的压缩格式7z优于Gzip。
18.Android中一些为了解决性能问题而生的类:LruCache,SparseArray,SparseBooleanArray,SparseIntArray,Pair。
19.自定义View中的线程以及Paint等资源的回收。
20.SQLite中的索引创建和compileStatement以及查询语句中的条件顺序。
21.了解依赖注入框架(代码简化框架)Dagger、Butter Knife等的实现原理。开发效率确实快了不少,但是应该会牺牲一点运行效率吧。两者取利弊吧。
只搬运了这么多。用或不用,它都在这里,或增或减,或对或错。
网友评论