2010-12-02 101 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()