好的,所以这段代码就在 Android 开发者网站上,它将 ImageView
设置为 Bitmap
:
class BitmapWorkerTask extends AsyncTask<Integer, Void, Bitmap> {
private final WeakReference<ImageView> imageViewReference;
private int data = 0;
public BitmapWorkerTask(ImageView imageView) {
// Use a WeakReference to ensure the ImageView can be garbage collected
imageViewReference = new WeakReference<ImageView>(imageView);
}
// Decode image in background.
@Override
protected Bitmap doInBackground(Integer... params) {
data = params[0];
return decodeSampledBitmapFromResource(getResources(), data, 100, 100));
}
// Once complete, see if ImageView is still around and set bitmap.
@Override
protected void onPostExecute(Bitmap bitmap) {
if (imageViewReference != null && bitmap != null) {
final ImageView imageView = imageViewReference.get();
if (imageView != null) {
imageView.setImageBitmap(bitmap);
}
}
}
}
基本上,我想做的不是做
imageView.setImageBitmap(bitmap);
我想返回那个 Bitmap
,这样我就可以在我的主 UI 中使用它。有什么办法可以做到这一点?抱歉,我对 AsyncTask
缺乏了解,我最近才开始学习它。谢谢!
最佳答案
实际上没有必要返回位图,而是在主 Ui 线程中使用它。您可以在 PostExecute 上执行此操作,因为 postExecute 在 UI 线程中运行。你的问题??是的,你可以从 AsynTask 返回位图,你可以这样做
private class myTask extends AsyncTask<Void,Void,Bitmap>{
protected Bitmap doInBackground(Void... params) {
//do stuff
return bitmap;
}
@Override
protected void onPostExecute(Bitmap result) {
//do stuff
}
}
现在你可以通过调用获取位图
Bitmap returned_bitmap = new myTask().execute().get()
这也不好,这会挂起您的 UI。但您可以像这样从 Aysnc 获得值(value)。
另一种方法是使用接口(interface)实现回调
public interface MyInterface
{
public void onPostExecute();
}
Activity 类
public class MyActivity extends Activity implements MyInterface{
private Bitmap Image;
public void onCreate(Bundle b)
{
super.onCreate(b);
new MyTask(this).execute();
}
@Override
public void onPostExecute() {
//Now you have your bitmap update by do in background
//do stuff here
}
private class MyTask extends AsyncTask<Void, Void, Void>
{
MyInterface myinterface;
MyTask(MyInterface mi)
{
myinterface = mi;
}
@Override
protected Void doInBackground(Void... params) {
//firt declare bitmap as class member of MyActivity
//update bitmap here and then call
myinterface.onPostExecute();
return null;
}
}
}
关于java - 如何从 Android 应用程序中的异步任务返回位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23960025/