我已经开发了一个简单的AsyncTask类,它将Handler作为参数,并在doBackground中发送HandlersendEmptyMessage(0),我加载了ProgressDialoge加载视图,但由于某种原因它直到执行内部的东西才显示出来我的Handler对象(换句话说,progressDialogue最后会闪烁)。
这是我的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;
}
}
这是我从一个Activity传递给这个类的处理程序:
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(我以前做过并且工作正常)。
答案 0 :(得分:1)
不是太惊讶它“眨眼”是吗?你的doInBackground()
几乎什么都没做......任务将立即完成。如果您想伪造在后台任务中实际进行某些处理或等待,请尝试使用sendEmptyMessageDelayed()
代替sendEmptyMessage()
。