2010-12-02 55 views
0

我開發了一個簡單的AsyncTask類,它將Handlers作爲其參數,同時在doBackground中發送HandlersendEmptyMessage(0),我加載ProgressDialoge加載視圖,但由於某種原因,它直到最後才顯示執行我的Handler對象內部的東西(換句話說,progressDialogue在最後閃爍)。Android progress dialoge view not showing

這裏是我的AsyncTask:

package com.kc.util; 

import android.app.ProgressDialog; 
import android.content.Context; 
import android.os.AsyncTask; 
import android.os.Handler; 
import android.util.Log; 

public class LoadDialoge extends AsyncTask<Handler, Integer, Void> { 

    private ProgressDialog progressDialog; 
    private String TAG = "LoadDialoge"; 
    private Context mContext; 

    @Override 
    protected void onPostExecute(Void result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 
     progressDialog.dismiss(); 
    } 

    @Override 
    protected void onPreExecute() { 
     // TODO Auto-generated method stub 
     super.onPreExecute(); 
     showWait(); 
    } 

    @Override 
    protected Void doInBackground(Handler... params) { 
     // TODO Auto-generated method stub 
     for(Handler mHandler : params){ 
      mHandler.sendEmptyMessage(0); 
      Log.d(TAG, "handler sending message"); 
     } 
     return null; 
    } 

    private void showWait() { 
     Log.d(TAG, "showWait"); 
     progressDialog = new ProgressDialog(mContext); 
     progressDialog.setTitle("Retrieving contact details"); 
     progressDialog.setMessage("Please wait..."); 
     progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
     progressDialog.show(); 
     Log.d(TAG, " "); 
    } 

    public void setmContext(Context mContext) { 
     this.mContext = mContext; 
    } 



} 

這裏是我傳遞給這個類從一個活動的處理程序:

private Handler mHandler = new Handler() { 

     @Override 
     public void handleMessage(Message msg) { 
      // TODO Auto-generated method stub 
      super.handleMessage(msg); 
      Log.d(TAG, "handleMessage"); 
      initialiseOnItemClickListeners(); 
      initialiseOnClickListeners(); 
      initialiseListViewAdapters(); 
      loadDataToDb(); 
      initializeTitles(); 
      initialize(); 
     } 

    }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.abstract_main_menu); 

     LoadDialoge load = new LoadDialoge(); 
     load.setmContext(this); 
     load.execute(mHandler); 

    } 

我試着去創建一個通用的異步加載屏幕,在任何工作活動,而不是在每個活動中複製和粘貼上述LoadDialogue AsyncTask(我之前所做的工作正常)。

回答

1

這不是太讓人驚訝嗎?「眨眼」是嗎?你的doInBackground()幾乎沒有做任何事......任務將立即完成。如果你想假設實際上有一些處理或等待在後臺任務中進行,請嘗試使用sendEmptyMessageDelayed()而不是sendEmptyMessage()