这是我的代码:
Thread one = new Thread() {
public void run() {
try {
new LongOperation(finalJson)
.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)
.get(30000, TimeUnit.MILLISECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
}
}
};
one.start();
我想说,如果AsyncTask
超过30000 MILLISECONDS并且未完成工作,则返回消息,我该如何编码?谢谢
答案 0 :(得分:0)
我更喜欢使用AsyncTask来做到这一点。
从链接复制粘贴:
AsyncTask允许正确且轻松地使用UI线程。这个班 允许您执行后台操作并在 UI线程,而无需操纵线程和/或处理程序。
AsyncTask被设计为围绕Thread和Handler的帮助器类 并且不构成通用线程框架。异步任务 理想情况下应用于短时间操作(在 大多数。)如果您需要使线程长时间运行, 强烈建议您使用由 java.util.concurrent包,例如Executor,ThreadPoolExecutor和 FutureTask。
这就是说,配置AsyncTask非常简单,只需创建一个如下所示的类:
private class LongOperation extends AsyncTask<String, Void, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
//this method works on the UI thread.
//this is the first to run before "doInBackground"
mTextView.setText("we start!");
}
@Override
protected String doInBackground(String... params) {
try {
//do whatever your async task needs to do. This method works async
//you can also call an UI callback from here with the publishProgress method. This will call the "onProgressUpdate" method, and it has to respect his type.
publishProgress("we go on!");
} catch (InterruptedException e) {
Thread.interrupted();
}
return "Executed";
}
@Override
protected void onPostExecute(String result) {
//this method works on the UI thread
//it get the "doInBackground" return value.
mTextView.setText(result);
}
@Override
protected void onPreExecute() {}
@Override
protected void onProgressUpdate(String... values) {
//this method works on UI thread, so it can access UI components and ctx
mTextView.setText(values[0]);
}
}
这是有关如何创建AsyncTask的基本示例,您可以像这样使用它(表单活动/片段):
AsyncTaskExample asyncTask = new AsyncTaskExample();
asyncTask.get(30000, TimeUnit.MILLISECONDS);
这将为您的异步操作设置超时。 Look here获取确切的异常/返回
如有其他疑问,请随意提问。希望这会有所帮助
我刚刚注意到您的线程中有一个AsyncTask
。由于AsyncTask
已经异步,因此我避免这样做,而只需使用我之前给您的方法调用AsyncTask
。这样,AsyncTask
将运行到给定的TimeSpan:)
答案 1 :(得分:-1)
请参见下面的代码:可能会对您有所帮助。
CountDownTimer timer = new CountDownTimer(3000,1000) {
@Override
public void onTick(long l) {
}
@Override
public void onFinish() {
//return a message here;
}
};
timer.start();
如果您有异步任务。然后在doInBackground
方法中执行以下操作:
@Override
protected Void doInBackground(Void... voids) {
//simply do your job
CountDownTimer timer = new CountDownTimer(3000,1000) {
@Override
public void onTick(long l) {
}
@Override
public void onFinish() {
//return a message here;
return message;
}
};
timer.start();
return your_reult;
}