2

我想使用AsyncTask將圖像加載到ListView。在asynctask中使用asynctask

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」是通過另一個線程在運行時更新的對象。所以我需要找到一種方法來使用一個Asynctask來定期控制一個對象的狀態。我怎麼做?由於

回答

4

只在後臺做後臺線程並運行postExecute和preExecute在UI線程本身。對於同樣的原因,美國可以顯示並駁回其對話框運行..

如果u想用單一的AsyncTask的多目的你可以通過傳遞不同的常數..在.execute()方法..

我的意思是這樣的。

Integer Constant1 = 1; 
int Constant2 = 2; 

,並同時呼籲,,

new Background.execute(Constan1 or 2) 

和的AsyncTask

doInBackground(Object.. arg0) 
{ 
if(arg0.equals()) 
{ 

} 
else if(arg0.equals()) 
{ 
} 
} 
2

看看的的AsyncTask文檔: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]); 
    } 
} 

你做你的背景的東西在doInB中ackground方法(在後臺線程中運行)。

您可以控制在onProgressUpdate你的對象(運行在UI線程)

的狀態你的後臺線程,並使用publishProgress UI線程之間發送消息。這些消息可能包含您的對象的狀態。