知识总结

一:不同场景下Actvity生命周期的变化过程

.启动Activity.                                                                                                                   onCreate-----onStart----onResume,Activity进入运行状态。

.Activity退居后台(当前Activity转到新的Activity或按Home键返回主屏幕)                             onPause----onStop,进入停滞状态

.Activity退居后台,且系统内存不足                                                                                系统会杀死这个后台状态下的Activity,若在回到这个Activity,则会走  onRestart----onStart---onResume

.锁定屏幕与解锁屏幕                                                                                                    只会调用onPause(),而不会调用onStop方法,开屏后则调用onResume().

二:获取手机的唯一标示(http://blog.csdn.net/xushuaic/article/details/25077179)

1.读取IMEI.MAC.CPU等物理信息(有不少工具可以修改IMEI);

2.如果都失败了,可以自己生成UUID保存到文件(文件也可能被篡改或删除)

三:ListView卡顿的原因和优化策略

1.重用converView:通过重复的converView来减少不必要的view的创建,Inflate操作会把xml文件实例化成相应的View实例,属于IO操作,是耗时操作。
2.减少findViewById()操作:将xml文件中的元素封装成viewholder静态类,通过converview的setTag和getTag方法将view与相应的holder对象绑定在一起,避免不必要的findViewById操作。

3.避免在getView方法做耗时操作:加载本地imageView需要载入内存以及解析Bitmap,都是比较耗时的操作,如果用户快速滑动listview,会因为getview逻辑过于复杂而造成滑动卡顿的现象。用户滑动的时候不加载图片,滑动完成之后在加载,使用glide可以完成

4.Item的布局层次结构尽量简单点,避免布局太深和不必要的重绘

5.尽量保证Adapter的hasStableds()返回true,在notifyDateSetChanged()时候,如果Item内容并没有变化,ListView将不会重新绘制这个View,达到优化的目的

6.在一些场景中,ScollView内包含多个ListView,可以把ListView的高度写死固定下来,由于ScollView在快速滑动的过程中需要大量计算每一个ListView的高度,阻止

UI线程导致卡顿象限出现,如果我们每一个Item的高度都是均匀的,可以通过计算把ListView的高度确定下来,避免卡顿现象出现。

7.使用RecycleView代替ListView:每个item内容的变通,listView都需要调用notifyDateSetChanged来更新全部的Item,太浪费性能了。RecycleView可以实现当个item的局部刷新,并且引入了增加和删除的动态效果,在性能和定制上都有很大的改善

8.ListView中元素避免半透明:半透明绘制需要大量乘法计算,在滑动时不停的重绘会造成大量的计算,在比较差的手机上会出现卡顿的现象。实在要设置半透明在滑动的时候把半透明设置成不透明,滑动完在重新设置成半透明。

9.尽量开启硬件加速:硬件加速提升巨大,避免使用一些不支持的函数导致含泪关闭某个地方的硬件加速。这一条不只对ListView.

 

posted @ 2017-08-29 09:48  让学习如呼吸一般自然  阅读(225)  评论(0编辑  收藏  举报