好的,这段代码就在 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(使用前将#替换为@)