记录Android开发过程中,遇到的一些小问题:
1.Android代码中设置TextView的TextSize,总不能出现预期的大小,需要如下设置:
mTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
静态调用比对象调用该方法快15%-20%。
3.静态内部类的使用
我们在程序中往往为了省事而顺手使用内部类实现所要功能,比如:
new Hanlder()/new Thread()/new TimerTask()
这么存在非静态内部类会持有 所在类的对象的隐患,如果该对象是Activity的话那么所带来的后果就是内存泄漏了。。 而要避免此类问题也很简单了,就是要把非静态内部类改为静态内部类,而它所持有外部类的对象则改为弱引用的形式。具体例子如下:
private static class ProgressTimerTask extends TimerTask{
WeakReference activityWeakReference;
public ProgressTimerTask(XXXActivity activity){
activityWeakReference = new WeakReference(activity);
}
@Override
public void run() {
XXXActivity activity = activityWeakReference.get();
if(activity == null){
return;
}
}
}
4.慎用AsyncTask,使用网络请求框架(Volley、OkHttp)代替
AsyncTask在1.6之前为串行,在1.6-2.3为并行,在3.0之后又改为串行,在3.0之后虽然可以通过代码来改变默认的串行为并行,但是又是一个繁琐的操作
5.给View设置虚线不显示的问题。
要添加
android
:layerType=
"software"属性才能正常显示虚线,调了好久,以为什么鬼问题呢。
6.点击PopupWindow外部,不消失的问题。
checkshareWindow = new PopupWindow(check_view, DensityUtil.getScreenWidth(this), WindowManager.LayoutParams.WRAP_CONTENT, true);
checkshareWindow.setBackgroundDrawable(new BitmapDrawable());
checkshareWindow.setOutsideTouchable(true);
checkshareWindow.showAtLocation(share, Gravity.BOTTOM, 0, 0);
showAtLocation方法调用之前的两行代码,这三行代码顺序不能颠倒。
7.通过这么设置可以解决全屏浮窗监听外部touch事件
this.layoutParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL
| LayoutParams.FLAG_NOT_FOCUSABLE
| LayoutParams.FLAG_NOT_TOUCHABLE | LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;
8.Android Studio使用Module自定义控件没提示问题
编译版本的问题,module的编译版本必须和library的一致才行,
修改module的gradle文件的compileSdkVersion和targetSdkVersion
9.Intent传递Parcelable序列化的对象、对象集合时,若对象中包含HashMap
public HashMapregular_map = new HashMap<>(); public Bitmap bitmap; // 单砖的情况:regular_map全部对应bitmap位图 public HashMap > tileTypeMap = new HashMap<>();
protected TileCuttingList(Parcel in) { regular_map = in.readHashMap(TileSizeInfo.class.getClassLoader()); bitmap = in.readParcelable(Bitmap.class.getClassLoader()); tileTypeMap = in.readHashMap(TileSizeInfo.class.getClassLoader()); } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeMap(regular_map); dest.writeParcelable(bitmap, 1); dest.writeMap(tileTypeMap); }