随手写,想哪写哪,不定期更
Glide
- 使用
simpleTag 等作为into() 对象时,需设置override() 属性避免加载图片过大导致OOM - 对于固定区域显示大图,能截取显示的情况下可截取部分显示于控件中,使用
Bitmap.createBitmap(scaleBitmap, 0, 0, w, h) 进行裁剪 - 对于大图可用BitmapRegionDecoder进行区域性显示,参考大图展示demo
onDestroy 延迟执行
- 由于onstop与onDestroy执行是在主线程IdleHandle回调下执行,如果主线程有任务未处理完,则不能立即回调onstop与onDestroy,但onReume会在延迟10s后调用退出方法作为兜底策略
- 解决方案一:找出阻塞线程,一般是由于动画在跳转或关闭页面是没停止注销或某些监听没有取消监听导致
- 解决方案二:如果阻塞的原因比较难找,可以在onPause判断isFinish()来觉得是否回收资源,提前执行要回收的代码,简单有效,这样可能存在的隐患在于onStop,onDestroy中的对象提前被回收导致空指针,还有就是getLifecycle().addObserver()绑定的对象生命周期执行的节奏不一致
- 参考 检查主线程执行哪些东西
资源图片
- 尽量加入多分辨率的图片,否则可能导致图片在高清设备上放大内存占用过多
- 使用imageAsset制作的ic_launcher图片外层带有一层透明层,进行裁剪显示时可能得不到想要的形状,使用其他png图片代替即可
- 文件下载时更新进度条可能会因为回调过于频繁而使界面发生ddos,可通过handle控制刷新的最小粒度
WebView优化
1.在使用WebView比较频繁的项目中,可提前初始化一个WebView待用,需要时直接引用,app退出时销毁,具体可参考H5实现秒开 2.销毁WebView
@Override
protected void onDestroy() {
super.onDestroy();
mWebViewContainer.removeView(mWebView);
mWebView.stopLoading();
mWebView.getSettings().setJavaScriptEnabled(false);
mWebView.clearHistory();
mWebView.removeAllViews();
mWebView.destroy();
}
RecyclerView
1.NestScrollView 与RecyclerView 嵌套会导致recycler不能复用,导致滑动卡顿 滑动嵌套处理 2. 分页查询由于新增数据导致重复数据解决 主要思想在于出入最后的ID给后台,后台在取值时永远取第一页,同时比较ID大小确认该页数据,避免因删除或插入导致之后的数据不准确
Dialog
- dialog 中使用的editText 没有光标显示使用
android:textCursorDrawable="@drawable/my_cursor" 属性进行设置
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/green" />
<size android:width="1dp" />
</shape>
常用list选择
- ArrayMap
ArrayMap的使用跟HashMap是一样的。当数据结构为<key,value>的时候,都可以使用ArrayMap替代。 但是相较于HashMap,ArrayMap在Android中也不总是高效的。当数据量大了(数百)之后,其性能就会下降至少50%。所以,当数据量小的时候,使用ArrayMap效率还是蛮高的
- SparseArray
也是用一个<Key,Value>对 SparseIntArray:当map的结构为Map<Integer,Integer>的时候使用,效率较高。 SparseBooleanArray: 当map的结构为Map<Integer,Boolean>的时候使用,效率较高。 SparseLongArray: 当map的结构为Map<Integer,Long>的时候使用,效率较高。 LongSparseArray: 当map的结构为Map<Long,Value>的时候使用,效率较高。
- ArraySet
和ArrayMap的目的类似,用来提高HashSet的效率。使用方法跟HashSet类似
- String 与 list< String >快速互转 需导入.guava 工具包
compile 'com.google.guava:guava:26.0-jre'
list->String : String s=Joiner.on(",").join(list); String->list: List< String > listSplitter.on("-").splitToList(str)
String
- 显示带有%字符的可能会报UnknownFormatConversionException,%需转义%%
|