在线程设置在一段时间后取消它之后,Asynctask没有超时

时间:2014-03-26 04:04:14

标签: android multithreading android-asynctask

如果某段时间超过(如果AsyncTask没有自动完成),我试图取消日志运行AsyncTask

以下是我将任务设置为以超时开始的代码

final ProfileDesc pdsc = new ProfileDesc();
    pdsc.execute();
    Thread th_pdsc = new Thread(){
        public void run()
        {
            try{
                pdsc.get(120000, TimeUnit.MILLISECONDS);
            }
            catch(Exception e){
                pdsc.cancel(true);
                ((Activity)context).runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                    Toast.makeText(context, "Download Time out. Please Try again later.", Toast.LENGTH_LONG).show();

                    }
                });
            }
        }
    };
    th_pdsc.start();

下面是我的AsynTask的代码

private class ProfileDesc extends AsyncTask<Void, Void, Void> {
protected void onPreExecute() {
        dialogue = new ProgressDialog(MainActivity.this);
        dialogue.setTitle("Processing");
        dialogue.setMessage("Getting Header Information");
        dialogue.setIndeterminate(true);
        dialogue.setCancelable(false);
        dialogue.show();
    }
protected void onPostExecute(Void params) {
        super.onPostExecute(params);
            dialogue.dismiss();
}
protected Void doInBackground(Void... arg0) {
//long run work
return null;
}
}

两分钟后它仍然在运行。如何设置超时?注意:我已经关注此代码的Stack Overflow this link

2 个答案:

答案 0 :(得分:0)

你有什么

 ProfileDesc pdsc = new ProfileDesc();
 pdsc.execute();

就够了。不需要线程。在后台线程上调用doInBackground。因此,您可以在doInbackgorund

中执行网络操作

其次调用get使AsyncTask不再异步,因为它阻止了ui线程

  

get(long timeout,TimeUnit unit)如果需要最多等待   给定计算完成的时间,然后检索它   结果

我猜你误解了Asynctask的使用。阅读文档

http://developer.android.com/reference/android/os/AsyncTask.html

您可能需要查看

Stop AsyncTask doInBackground method

答案 1 :(得分:0)

这里不需要新线程。只需删除“dialog.setIndeterminate(true)”。这意味着“负载量”没有被测量。我认为它正在产生问题。