如果某段时间超过(如果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。
答案 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
您可能需要查看
答案 1 :(得分:0)
这里不需要新线程。只需删除“dialog.setIndeterminate(true)”。这意味着“负载量”没有被测量。我认为它正在产生问题。