知识总结
一:不同场景下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.