1、关于
@SuppressWarnings("WrongConstant")
,禁止提示警告提示,
ide会对警示做高亮标识,这些地方有待修改以提高性能,如果实在不想处理它,就在响应的地方加上这句话来忽略提示,忽略提示加的位置可以是当前class,也可以是当前的方法或者语句,建议是精确到当前方法
2、Hardcoded reference to /sdcard
Do not hardcode "'/data/'"; use 'Context.getFilesDir().getPath()' instead
获取路径的时候,不同手机厂商的sd卡路径可能是不一样的,建议不使用硬编码的方式来指定,可以使用Context.getFilesDir().getPath()来替代
3、自定义控件,采用v7库的compatXXX控件来继承,考虑到更优的兼容性
4、Implied default locale in case conversion,出于国际化的需求,String.format,
- To get local formatting use 'getDateInstance()', 'getDateTimeInstance()', or 'getTimeInstance()', or use 'new SimpleDateFormat(String template, Locale locale)' with for example 'Locale.US' for ASCII dates.
方法可以设置语言环境,如果没有国际化的打算,可以关闭此类提示,
5、inflate的使用,
LayoutInflater.from(this).inflate( R.layout.widget_recommend_stock_ad, null);
View.inflate(getContext(), headLayoutId, null);
第三个参数都带有null,这里的参数root的设置很关键,会影响到xml解析生成的view;如果设置成null即没有指定“根布局”的话,xml的最外层根布局设置的Android:layout_xxx等属性不会生效,因为android:layout_xxx等属性是在根布局中获得的,例如margin,如果外层布局没有设置相关属性可以使用以上方法,例如生成一个对话框
6、关于SharePreferences,最后提交的时候,可以使用commit或者apply,却别是commit是同步的方法,会返回一个布尔类型来判断此操作是否成功,会占用一点等待的时间,如果是用apply,这是异步的方法,不反馈操作是否成功,优点就是不占用主线程,如果对提交的结果没有确保成功的要求,推荐使用apply。
7、外层包裹了scrollview,内层的viewGroup建议使用'android:layout_height="wrap_content"',或者
'android:layout_width="wrap_content"',根据scrollview的方向来定,这样scrollview有渲染的时候性能更佳
8 、重写view的onMesure,onLayout方法的时候,应该避免在方法内部使用new 关键字,因为new的开销比较大,这些方法涉及到渲染的过程,使用new会出现卡顿,建议在初始化的时候new,然后在onMesure,onLayout,onDraw方法里面引用属性。
9
- This Handler class should be static or leaks might occur (anonymous com.guosen.kuanggong.widget.banner.CycleViewPagerHandler)
匿名内部类使用handler,如果里面执行耗时操作,并且当前窗口退出时,可能导致内存泄露,因为匿名内部类默认持有外部类的引用,垃圾回收机制在检测外部类时,发现其内部的handler还持有这个引用,就不执行回收操作了,方法有两个,一个是在destroy的时候调用一下removeCallbacksAndMessages(null)方法来清空消息队列,这样就立刻释放了持有引用,第二种就是通过弱引用的方式,
private static class MyHandler extends Handler {
private final WeakReference<SampleActivity> mActivity;
public MyHandler(SampleActivity activity) {
mActivity = new WeakReference<SampleActivity>(activity);
}
@Override
public void handleMessage(Message msg) {
SampleActivity activity = mActivity.get();
if (activity != null) {
// ...
}
}
}
10,数据量不超过1000个的时候,SparseArray<T> 替换 HashMap<int , T >
1,SparseArray的原理是二分检索法,也因此key的类型都是整型。
2,(HashMap和SparseArray比较)当存储大量数据(起码上千个)的时候,优先选择HashMap。如果只有几百个,用哪个区别不大。如果数量不多,优先选择SparseArray。
3,SparseArray有自己的垃圾回收机制。(当数量不是很多的时候,这个不必关心。)
11
- Set 'android:baselineAligned="false"' on this element for better performance
使用LinearLayout的时候,如果内层只套一个viewgroup,就加上android:baselineAligned="false",因为linearlayout在渲染的时候,会计算基准线,关闭它可以提高一部分性能
12
使用Integer.valueOf()来代替 new Integer(),源码:
public static Integer valueOf(int i) {
final int offset = 128;
if (i >= -128 && i <= 127) { // must cache
return IntegerCache.cache[i + offset];
}
return new Integer(i);
}
如果数字在-128到127,使用,缓存,确实快一些
13、
声明为static的方法不需要加final修饰,因为static方法是属于类的,子类无法继承这个方法