线程的优先级用1-10之间的整数表示,数值越大优先级越高,默认的优先级为5。安卓的UI线程的优先级也为5,可以通过设置优先级来增加ui的流畅。
Thread thread = new Thread(new MyRunnable());
thread.setPriority(10);
导致内存泄漏的原因。
- 静态变量持有Activity的引用。
- 静态变量持有内部类。
- 后台工作的线程
- 非静态内部类 和 匿名类 都会潜在的引用它们所属的外部类,但是,静态内部类却不会。如果这个非静态内部类实例做了一些耗时的操作,就会造成外围对象不会被回收,从而导致内存泄漏。
- 注册系统的一些服务时会使服务持有Context的引用。比如Context.SENSOR_SERVICE,Context.INPUT_METHOD_SERVICE
- Adapter的view没有复用。
画面卡顿的优化:
1. 过度绘制
2. UI线程执行耗时任务
3. 频繁GC
大量的对象被创建又在短时间内马上被释放,造成内存抖动(Memory Churn).
瞬间产生大量的对象会严重占用Young Generation的内存区域, 当达到阀值, 剩余空间不够的时候, 也会触发GC.
4. 提高UI线程的优先级
5. 不可见的使用ViewStub进行懒加载。
.so的优化
教室的视频,音频。
listview的优化。
兼容性问题
1、从相册获取图片时,图片的uri和实际路径的转换问题
从Intent选择相册,返回后的uri,若要获取实际图片地址,会有各种问题。根据api的版本进行了修。
2、安卓19之后要可以设置statu bar设置成透明。
if (Build.VERSION.SDK_INT > 11) {
request.setNotificationVisibility(Request.VISIBILITY_VISIBLE
| Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
} else {
request.setShowRunningNotification(true);
}
3、
if (android.os.Build.VERSION.SDK_INT > 8) {
mContext.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
} else {
mContext.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
4、播放和录制音频设置采样率为22050时很多高端设备不兼容,所以播放和录制采用44100,传输时转换成22050节省带宽。
5、AlertDialog.Builder 的setView方法到版本21才有,请使用compat-v7包中的AlertDialog.Builder。