Android相册解决加载大量图片卡顿问题

您所在的位置:网站首页 相册视频加载很慢 Android相册解决加载大量图片卡顿问题

Android相册解决加载大量图片卡顿问题

2023-06-29 22:41| 来源: 网络整理| 查看: 265

Android开发中加载相册是很常用的功能,但相册图片过多正常加载会产生卡顿,即便使用线程异步加载图片卡顿问题依然得不到改善。 正常代码:

public class AlbumAdapter extends ?{ @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { if(bitmap!=null){ 线程加载图片 } else 读取缓存 } }

卡顿原因是无论怎样优化读取IO都是费时的工作,adapter又会一次实例多个子项,导致加载的图片过多,内存占用率过高产生了卡顿。 优化代码:

public class AlbumActivity extends AppCompatActivity{ private RecyclerView mRecyclerView; private List photoItemList; private List selectItemList; private int[] photoLayout; private AlbumAdapter mAdapter; private Handler handler; private Button submit; private GridLayoutManager gridLayoutManager; private static final String[] STORE_IMAGES = { MediaStore.Images.Media.DISPLAY_NAME, // 显示的名字 MediaStore.Images.Media.LATITUDE, // 维度 MediaStore.Images.Media.LONGITUDE, // 经度 MediaStore.Images.Media._ID, // id MediaStore.Images.Media.BUCKET_ID, // dir id 目录 MediaStore.Images.Media.BUCKET_DISPLAY_NAME, // dir name 目录名字 MediaStore.Images.Media.DATA//路径 }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_album); submit = (Button)findViewById(R.id.submit); mRecyclerView = (RecyclerView)findViewById(R.id.list); gridLayoutManager = new GridLayoutManager(this, 3); mRecyclerView.setLayoutManager(gridLayoutManager); mRecyclerView.setHasFixedSize(true); photoLayout = new int[2]; photoLayout[0]=(ScreenHelper.getScreenWidth(this) - ScreenHelper.dp2px(this, 20)) / 3 - ScreenHelper.dp2px(this, 10); photoLayout[1] = ScreenHelper.dp2px(this, 110); gridLayoutManager.findFirstCompletelyVisibleItemPosition(); initPhoto(); notifySubmit(); mAdapter = new AlbumAdapter(mRecyclerView,photoItemList,selectItemList); mAdapter.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(RecyclerView.ViewHolder viewHolder, int position) { notifySubmit(); } }); mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { //停止滑动后缓存当前屏幕图片 if(newState == 0){ new Thread(new Runnable() { @Override public void run() { for(int i=gridLayoutManager.findFirstVisibleItemPosition();i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3