安卓APP优化归档

来源:互联网 发布:16进制转换10进制算法 编辑:程序博客网 时间:2024/04/30 19:31

经过N个项目(包括线上和练手自己写的),觉得想成为资深的app开发工程师,肯定会遇到对项目优化的问题,结合大神们的文章,做了一个简单的归档:

抽空简单汇总一下,高级工程师路过,O(∩_∩)O哈哈~

1.APP启动速度。

主要是冷启动和热启动的启动速度,通过在application入口减少耗时的操作来进行优化。

参考文章: 启动优化1
启动优化2

2.UI

去除不必要的android:background属性来减少Overdraw ,使用Hierarchy Viewer来减少层次结构.有4个比较特别的标签是非常重要:viewStub,requestFocus,merge和include,其中3个与资源复用有关。

viewStub直观效果类似于View的不可见性,但其所包裹的View在默认状态下不会占用任何内存空间。viewStub通过include从外部导入View元素。用法:通过属性android:layout来设定内容。

include 用于直接加载xml,是复用UI资源的常用标签。用法:通过属性layout来设定加载的xml。

requestFocus 用于设定焦点。用法:将requestFocus放于View标签中。

merge 目的:删减多余或额外的层级。

如果你创建的Layout不是把FrameLayout当作根节点,就不能使用merge来优化。

当使用include或viewStub从外部导入xml结构时,可以将被导入的xml用merge作为根节点,这样当被嵌入后可以很好地融合,不会出现冗余的节点。

只可以作为xml-layout的根节点。扩充的xml-layout是merge作为根节点时,需要将被导入的xml-layout置于viewGroup中,同时需要设置attachToRoot为true。

参考文章: ui优化1
ui优化2
检测ui卡顿的方法

3.代码。

可以专注于代码的可维护性,可以使用StrictMode(2.3引入),检测应用中执行缓慢的代码或潜在缓慢的代码。
注意:只是在开发阶段启用StrictMode,发布应用时,记得要禁用它,如果你使用detectAll()方法去简历策略总是可行的。

静态变量引起内存泄露
生命周期较长,避免当前activity使用后,存在引用,最后没有释放。

使用Application的Context
Application Context的生命周期和应用的生命周期一样长。如果生命长的对象需要一个Context,就可以使用Application对象。

及时关闭资源
数据库contentprovider,io,sokect、cursor等。

列表的优化
使用ViewHolder 对adapter进行优化。

谨慎使用external libraries
即使是针对Android而设计的library,也可能是很危险的,因为每一个library所做的事情都是不一样的。例如,其中一个lib使用的是nano protobufs, 而另外一个使用的是micro protobufs。那么这样,在你的app里面就有2种protobuf的实现方式。这样的冲突同样可能发生在输出日志,加载图片,缓存等等模块里面。同样不要陷入为了1个或者2个功能而导入整个library的陷阱。如果没有一个合适的库与你的需求相吻合,你应该考虑自己去实现,而不是导入一个大而全的解决方案。

减少内存对象的占用
· *SparseArray< E > sparseArray = new SparseArray< E >();
替代HashMap< Integer, E> hashMap = new HashMap< Integer, E>();*
· SparseBooleanArray,用来取代HashMap< Integer, Boolean>
·避免在android里面使用Enum
· bitmap的inSampleSize:缩放比例和decode format:解码格式可以减少内存占用。

参考文章

**

4. 内存优化。

使用LeakCanary工具来检测内存泄露并处理。

参考链接

5. 电量、网络等优化。

电量
网络

6. 兼容性。

· 系统的兼容,比如更新下载功能 需要做 7.0的兼容代码处理。
· UI的兼容,自定义组件控制好文字长度,以免超出外边界。

0 0