如何从 Android 应用程序中的异步任务返回位图

2024-04-01

好的,这段代码就在 Android 开发者网站上,它设置了一个ImageView to a 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 获得价值。

您可以做的另一种方法是使用接口实现回调

public interface MyInterface 
{
   public void onPostExecute();
}

活动课

 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;
    }

}

 }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 Android 应用程序中的异步任务返回位图 的相关文章

随机推荐