关于ViewPager设置属性页setCurrentItem会阻塞主线程ANR总结
来源:互联网 发布:华为数据库一体机 编辑:程序博客网 时间:2024/06/07 13:37
关于android开发设置View Pager的直接跳转页set CurrentItem会阻塞主线程ANR。
根据网上解决的说法,分析源码:
if (mFirstLayout) { // We don't have any idea how big we are yet and shouldn't have any pages either. // Just set things up and let the pending layout handle things. mCurItem = item; if (dispatchSelected) { dispatchOnPageSelected(item); } requestLayout();} else { populate(item); scrollToItem(item, smoothScroll, velocity, dispatchSelected);}
是因为主线程测量滑动距离,绘制UI阻塞,因此通过反射拿到 mFirstLayout变量,每次在setCurrentItem的代码之前设置为true,
try {
Field mFirstLayout = ViewPager.class.getDeclaredField("mFirstLayout");
mFirstLayout.setAccessible(true);
mFirstLayout.set(vpImg, true);
vpImg.setCurrentItem(num + numCenter, false);
} catch (Exception e) {
e.printStackTrace();
}
根据以上解决方法本应能够解决ANR,可事实依然存在问题,上码:
@Override
public int getCount() {
tvPicSum.setText(vpImg.getCurrentItem() % mOrderListPic.size() +
1 + "/"
+ mOrderListPic.size());
if (mOrderListPic.size() >= 2) {// 当条目超过一个
return Integer.MAX_VALUE;
}
return mOrderListPic.size();
}
这是我的适配器PagerAdapter的getCount()方法,为了能够实现ViewPager的近似无限轮播效果,我们将viewPager的限制页数设置为Integer类型的最大值,但也从而会使ViewPager在setCurrentItem时测量页数太大,绘制UI频繁而阻塞主线程ANR,因此我将数量改成了相对较小些mOrderListPic.size()*40。问题便得带了根本的解决。
1 0
- 关于ViewPager设置属性页setCurrentItem会阻塞主线程ANR总结
- viewpager setCurrentItem 过多出现卡顿 ANR 线程阻塞 页面无响应
- 主线程(UI线程)负责UI, 被阻塞过久会产生ANR
- ViewPager setCurrentItem 设置滑动速度
- 关于主线程阻塞导致界面卡顿问题总结
- ViewPager的setCurrentItem数值过大导致ANR异常
- 怎么设置viewpager在使用setCurrentItem的滑动速度
- 怎么设置viewpager在使用setCurrentItem的滑动速度
- 设置viewpager在使用setCurrentItem的滑动速度
- runloop 阻塞主线程
- 解决ViewPager setCurrentItem 时闪太快
- ViewPager 的adapter 设置notifyDataSetChanged(),后 ViewPager.setCurrentItem()无效。(页面不滚动)
- 关于ANR线程阻塞那些坑
- 通过实例验证播放本地音乐MediaPlayer的reset函数并不会阻塞主线程
- 使用ThreadPoolExecutor,当提交线程超过maximumPoolSize 会阻塞主线程吗?
- ViewPager中setCurrentItem()失效分析
- ViewPager.setCurrentItem(0)报错
- 关于主线程中自动建立的Looper的思考:主线程中Looper中的轮询死循环为何没有阻塞主线程
- zstack(一)运行及开发环境搭建及说明
- C/C++训练1---最大公约数与最小公倍数
- ....
- 理解Mysql_fetch_row()返回查询结果
- 生成全排列
- 关于ViewPager设置属性页setCurrentItem会阻塞主线程ANR总结
- Spring redis listener container配置问题
- 动态规划 02 (最大子矩阵)
- 动态规划:最长上升子序列
- 简单枚举类型——植物与颜色
- 第八天2017/04/17(1、拷贝构造、❤临时对象)
- iOS webView加载本地html、css、js文件
- 常用函数
- 使用phpexcel导出大容量数据时出现的相关问题