IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 常用优化项 -> 正文阅读

[移动开发]常用优化项

随手写,想哪写哪,不定期更

Glide

  1. 使用simpleTag等作为into()对象时,需设置override()属性避免加载图片过大导致OOM
  2. 对于固定区域显示大图,能截取显示的情况下可截取部分显示于控件中,使用Bitmap.createBitmap(scaleBitmap, 0, 0, w, h)进行裁剪
  3. 对于大图可用BitmapRegionDecoder进行区域性显示,参考大图展示demo

onDestroy 延迟执行

  1. 由于onstop与onDestroy执行是在主线程IdleHandle回调下执行,如果主线程有任务未处理完,则不能立即回调onstop与onDestroy,但onReume会在延迟10s后调用退出方法作为兜底策略
  2. 解决方案一:找出阻塞线程,一般是由于动画在跳转或关闭页面是没停止注销或某些监听没有取消监听导致
  3. 解决方案二:如果阻塞的原因比较难找,可以在onPause判断isFinish()来觉得是否回收资源,提前执行要回收的代码,简单有效,这样可能存在的隐患在于onStop,onDestroy中的对象提前被回收导致空指针,还有就是getLifecycle().addObserver()绑定的对象生命周期执行的节奏不一致
  4. 参考 检查主线程执行哪些东西

资源图片

  1. 尽量加入多分辨率的图片,否则可能导致图片在高清设备上放大内存占用过多
  2. 使用imageAsset制作的ic_launcher图片外层带有一层透明层,进行裁剪显示时可能得不到想要的形状,使用其他png图片代替即可
  3. 文件下载时更新进度条可能会因为回调过于频繁而使界面发生ddos,可通过handle控制刷新的最小粒度

WebView优化

1.在使用WebView比较频繁的项目中,可提前初始化一个WebView待用,需要时直接引用,app退出时销毁,具体可参考H5实现秒开
2.销毁WebView

@Override
protected void onDestroy() {
    super.onDestroy();
    // 先从父控件中移除WebView
    mWebViewContainer.removeView(mWebView);
    mWebView.stopLoading();
    mWebView.getSettings().setJavaScriptEnabled(false);
    mWebView.clearHistory();
    mWebView.removeAllViews();
    mWebView.destroy();
}

RecyclerView

1.NestScrollView 与RecyclerView 嵌套会导致recycler不能复用,导致滑动卡顿
滑动嵌套处理
2. 分页查询由于新增数据导致重复数据解决 主要思想在于出入最后的ID给后台,后台在取值时永远取第一页,同时比较ID大小确认该页数据,避免因删除或插入导致之后的数据不准确

Dialog

  1. 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选择

  1. ArrayMap

ArrayMap的使用跟HashMap是一样的。当数据结构为<key,value>的时候,都可以使用ArrayMap替代。
但是相较于HashMap,ArrayMap在Android中也不总是高效的。当数据量大了(数百)之后,其性能就会下降至少50%。所以,当数据量小的时候,使用ArrayMap效率还是蛮高的

  1. SparseArray

也是用一个<Key,Value>对
SparseIntArray:当map的结构为Map<Integer,Integer>的时候使用,效率较高。
SparseBooleanArray: 当map的结构为Map<Integer,Boolean>的时候使用,效率较高。
SparseLongArray: 当map的结构为Map<Integer,Long>的时候使用,效率较高。
LongSparseArray: 当map的结构为Map<Long,Value>的时候使用,效率较高。

  1. ArraySet

和ArrayMap的目的类似,用来提高HashSet的效率。使用方法跟HashSet类似

  1. 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

  1. 显示带有%字符的可能会报UnknownFormatConversionException,%需转义%%
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-02-16 13:14:01  更:2022-02-16 13:15:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 14:26:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码