如何将 Asynctask 用于位图?
Posted
技术标签:
【中文标题】如何将 Asynctask 用于位图?【英文标题】:How to use Asynctask for bitmap? 【发布时间】:2018-06-16 21:22:25 【问题描述】:我正在将图像从我的 mp3 文件中提取到 Bitmap[],但这会导致应用程序停止一点,我想使用 Asynctask 使其更流畅。
这是我得到位图的方式:
Bitmap[] bm = new Bitmap[mySongs.size()];
for (int i = 0; i < mySongs.size(); i++)
if (mySongs.size() > 0)
u = Uri.parse(mySongs.get(i).toString());
mediaMetadataRetriever = new MediaMetadataRetriever();
mediaMetadataRetriever.setDataSource(getApplicationContext(), u);
byte[] artBytes = mediaMetadataRetriever.getEmbeddedPicture();
if(artBytes != null)
InputStream is = new ByteArrayInputStream(mediaMetadataRetriever.getEmbeddedPicture());
bm[i] = BitmapFactory.decodeStream(is);
怎么放到Asynctask中?
【问题讨论】:
把它放在你的 AsyncTask 的doInBackground()
中。
【参考方案1】:
这就是你的实现的样子:
AsyncTask myAsyncTask = new AsyncTask()
@Override
protected Object doInBackground(Object[] objects)
//ToDo: Do all the work in here and return result as object
return null;
@Override
protected void onPostExecute(Object o)
super.onPostExecute(o);
//ToDo: Do whatever you want to do with the result in here
我建议创建一个扩展 AsyncTask
的静态类,或者不要在此处传递任何上下文,否则可能会发生内存泄漏
【讨论】:
以上是关于如何将 Asynctask 用于位图?的主要内容,如果未能解决你的问题,请参考以下文章
在 AsyncTask 中使用 Picasso 从 URL 获取位图
Android开发学习之路-使用AsyncTask进行异步操作
从片段调用 Android AsyncTask 没有调用其成员 - doInbackground、onpreexecute、onpostexecute