这个问题与我的问题here有关,但这本身就是一个问题,所以在这里, 我如何将一个字节数组转换为可从UI线程中删除,并且从性能角度来看是否有任何意义? 尝试它的方式是作为适配器的一部分,进度条工作,但图像永远不会加载,并在android studio中给我一个错误
继承人如何尝试这样做(我以前从未使用异步任务)
private class MyAsyncTask extends AsyncTask<Bitmap, Void, Bitmap> {
private byte[] data;
private ProgressBar progress;
private MyViewHolder holder;
public MyAsyncTask(byte[] data,ProgressBar progress,MyViewHolder holder) {
this.data = data;
this.progress = progress;
this.holder = holder;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
progress.setVisibility(View.VISIBLE);
progress.setIndeterminate(true);
}
@Override
protected Bitmap doInBackground(Bitmap... data) {
return BitmapFactory.decodeByteArray(this.data, 0, data.length);
}
@Override
protected void onPostExecute(Bitmap response) {
super.onPostExecute(response);
{
Drawable drawable = new BitmapDrawable(response);
holder.cardImage.setImageDrawable(drawable);
progress.setVisibility(View.GONE);
}
}
}
然后我用这个方法来调用它:
public void startNewAsyncTask(byte[] image,ProgressBar progress,MyViewHolder holder) {
MyAsyncTask asyncTask = new MyAsyncTask(image,progress,holder);
asyncTask.execute();
}
我从我的观众那里这样称呼:
startNewAsyncTask(cardmaker.getCardIcon(),holder.progress,holder);
这给了我这个错误:
D/skia: --- SkImageDecoder::Factory returned null
我尝试异步任务之前的工作非常简单,这个;
Drawable drawable = new BitmapDrawable(Utility.getPhoto(cardmaker.getCardIcon()));
holder.cardImage.setImageDrawable(drawable);
和那个&#39; Utility.getPhoto&#39;看起来像这样
public static Bitmap getPhoto(byte[] image) {
return BitmapFactory.decodeByteArray(image, 0, image.length);
}
这使得编舞者跳过帧并最终使用OutOfMemoryError崩溃我的应用程序,这实际上是我尝试实现此异步任务的重点,所以如果我的理解是根本错误的,请不要犹豫告诉我
非常感谢答案 0 :(得分:0)
:此强>
protected Bitmap doInBackground(Bitmap... data) {
return BitmapFactory.decodeByteArray(this.data, 0, data.length);
}
应该是
protected Bitmap doInBackground(Bitmap... data) {
return BitmapFactory.decodeByteArray(this.data, 0, this.data.length);
}
但它没有解决我的内存错误的强调问题,它只是从不同的地方抛出它