经过长达一个多星期的反复渲染耗时记录,大致上有以下几个方面的地方可以优化:
先介绍RecyclerView刷新机制notifyItemRangeInserted()
大致用法如下:
// 在RecyclerView的适配器中,使用notifyItemRangeInserted通知数据插入
// positionStart为插入操作的起始位置
// itemCount为插入的数据项数量
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
// ... 其他代码
// 在适配器中定义数据集合
private List<String> mData;
// ... 其他代码
// 在适配器中定义方法用于插入新的数据项
public void insertData(List<String> newData, int positionStart) {
mData.addAll(positionStart, newData); // 在指定位置插入新数据
notifyItemRangeInserted(positionStart, newData.size()); // 通知适配器数据插入
// ... 其他代码
这个方法亲测过,对于数据量比较大的情况优化效果比较明显,至少对笔者的场景很有用,这个方法使用后避免了上下滑动的过程中出现的卡顿严重的情况,目前还有个大问题就是新加载一页数据渲染问题。后面再说,下面介绍几个刷新机制的用法:
notifyItemRangeRemoved
// 在RecyclerView的适配器中,使用notifyItemRangeRemoved通知数据移除
// positionStart为移除操作的起始位置
// itemCount为移除的数据项数量
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
// ... 其他代码
// 在适配器中定义数据集合
private List<String> mData;
// ... 其他代码
// 在适配器中定义方法用于移除数据项
public void removeData(int positionStart, int itemCount) {
mData.subList(positionStart, positionStart + itemCount).clear(); // 移除指定位置范围内的数据
notifyItemRangeRemoved(positionStart, itemCount); // 通知适配器数据移除
// ... 其他代码
notifyItemRangeChanged
// 在RecyclerView的适配器中,使用notifyItemRangeChanged通知数据变化
// positionStart为变化操作的起始位置
// itemCount为变化的数据项数量
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
// ... 其他代码
// 在适配器中定义数据集合
private List<String> mData;
// ... 其他代码
// 在适配器中定义方法用于修改数据项
public void changeData(List<String> newData, int positionStart) {
for (int i = 0; i < newData.size(); i++) {
mData.set(positionStart + i, newData.get(i)); // 修改指定位置范围内的数据
notifyItemRangeChanged(positionStart, newData.size()); // 通知适配器数据变化
// ... 其他代码
notifyItemMoved
// 在RecyclerView的适配器中,使用notifyItemMoved通知数据项移动
// fromPosition为数据项移动前的位置
// toPosition为数据项移动后的位置
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
// ... 其他代码
// 在适配器中定义数据集合
private List<String> mData;
// ... 其他代码
// 在适配器中定义方法用于移动数据项
public void moveData(int fromPosition, int toPosition) {
String item = mData.remove(fromPosition); // 移除原位置的数据项
mData.add(toPosition, item); // 将数据项插入到新位置
notifyItemMoved(fromPosition, toPosition); // 通知适配器数据项移动
// ... 其他代码
后面几个没有亲测过,可能具体用法有所区别,这里只是记录一下方便备用
【Android】画面卡顿优化列表流畅度四之Glide几个常用参数设置
好用的Api工具推荐
历时一年半多开发终于smartApi-v1.0.0版本在2023-09-15晚十点正式上线
smartApi是一款对标国外的postman的api调试开发工具,由于开发人力就作者一个所以人力有限,因此v1.0.0版本功能进行精简,大功能项有:
api参数填写
api请求响应数据展示
PDF形式的分享文档
Mock本地化解决方案
api列表数据本地化处理
再加上UI方面的打磨
本地运行,性能优越,高效,快捷
下面是一段smartApi使用介绍: