我想使用AsyncTask将图像加载到ListView中。
private class LoadImageTask extends AsyncTask<HashMap<String,Bitmap>,Void,Bitmap>{
@SuppressWarnings("unchecked")
@Override
protected void onPostExecute(Bitmap result) {
if(model.getIconCache().get(cellIcon)!=null){
icon.setImageBitmap(model.getIconCache().get(cellIcon));
}else{
new LoadImageTask().execute(model.getIconCache());
}
}
@Override
protected Bitmap doInBackground(HashMap<String, Bitmap>... params) {
//return model.getIconCache().get(cellIcon);
return null;
}
}好吧,我知道这不是一个有情感的代码。然而,它工作得很好,但需要大量的内存分配。当阅读有关AsyncTask的文档时,它说Asynctask只能从UI线程调用,怎么能让它在内部使用呢?当然,我想让我的代码在单个AsyncTask中工作。代码中的"model“是一个在运行时通过另一个线程更新的对象。因此,我需要找到一种方法来使用单个异步任务来定期控制对象的状态。我该怎么做?谢谢
发布于 2011-07-18 19:08:43
只有在backGround中运行在backGround线程上,而postExecute和preExecute运行在UI线程本身上。出于同样的原因,您可以在其中显示和取消对话框。
如果你想将单个异步任务用于多种目的,你可以通过传递不同的常量来实现。在.execute()方法中..
我的意思是像这样的东西。
Integer Constant1 = 1;
int Constant2 = 2;在打电话的时候,
new Background.execute(Constan1 or 2)在AsyncTask中
doInBackground(Object.. arg0)
{
if(arg0.equals())
{
}
else if(arg0.equals())
{
}
}发布于 2011-07-18 19:20:47
看看异步任务文档:http://developer.android.com/reference/android/os/AsyncTask.html
private class MyTask extends AsyncTask<Void, Integer, Boolean> {
protected Boolean doInBackground(Void...) {
int i = 0;
while(true){
publishProgress(i++);
}
}
protected void onProgressUpdate(Integer... progress) {
myObject.setState(progress[0]);
}
}您可以使用publishProgress在后台线程和UI线程之间发送消息。这些消息可能包含对象的状态。
https://stackoverflow.com/questions/6731919
复制相似问题