异步任务可以部分运行吗?

时间:2011-05-11 20:12:44

标签: java android

它绝对有效,因为postData发送到我的网站并转发它正在做的电子邮件。但是loadDialog没有执行(可能是但这是一个非常快速的过程)。 senddialog的最后一个进程没有执行,因为它会显示一个新的对话框,说明已发送但未发生。 我有这个异步的脚本

    protected class sendReport extends AsyncTask<Void, Void, Void> {
    protected void onProgressUpdate()  {
         progressdialog();
    }
    protected void onPostExecute() {
        sentdialog();
        loadingDialog.dismiss();
    }
    @Override
    protected Void doInBackground(Void... arg0) {
        postData();
        publishProgress();
        return null;
    }

}

以下是发送的对话框脚本。

public void sentdialog(){
    //set up dialog
    final Dialog sentdialog = new Dialog(context);
    sentdialog.setContentView(R.layout.sentdialog);
    sentdialog.setTitle("Sent");
    sentdialog.setCancelable(true);

    final Button button = (Button) sentdialog.findViewById(R.id.Button01);
    button.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            sentdialog.dismiss();
        }
    });   
    sentdialog.show();
} 

1 个答案:

答案 0 :(得分:2)

编辑:您可以使用给定活动Main的处理程序执行此操作:

首先为每个活动创建一个处理程序:

private ProgressDialog progress;
private Handler myHandler= new Handler(){
    @Override
    public void  handleMessage(Message msg){         
        switch(msg.what){
            case 0:
                progress.dismiss();
                sentDialog();
                break;
            default:
                super.handleMessage(msg);
                break;
        }
    }
};

我写了你的progressDialog,postData,sentDialog方法:

private ProgressDialog progressDialog() {
    progress= new ProgressDialog(this);
    progress.setIndeterminate(true);
    progress.setMessage("I am thinking");
    return progress;
}
private String postData() {
    try{
    Thread.sleep(1000);
    }
    catch(Exception e){;}
    Log.d(TAG,"postData");
    return "done";
}
private void sentDialog() {
    Toast.makeText(Main.this,"Sent", Toast.LENGTH_SHORT).show();
}

并在onclick中调用:

// DISPLAY ON CLICK HANDLER
displayButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            progressDialog().show();
        Thread thread= new Thread( new Runnable() {
            public void run() {
                postData();
                myHandler.sendEmptyMessage(0);
            }
        });
        thread.setDaemon(true);
        thread.start();
        }
});