Android asynctask android:AsyncTask onPostExecute即使在doInBackground上启动新活动也能继续工作
我正在为客户端构建一个应用程序,用于从服务器获取问题并回答问题,如果服务器没有问题,我希望转到新屏幕并打印消息,几分钟后重试,获取问题在Android asynctask android:AsyncTask onPostExecute即使在doInBackground上启动新活动也能继续工作,android-asynctask,Android Asynctask,我正在为客户端构建一个应用程序,用于从服务器获取问题并回答问题,如果服务器没有问题,我希望转到新屏幕并打印消息,几分钟后重试,获取问题在异步任务中,如果服务器没有问题,它将在响应的标题中发送,标题isFindAQuestion的值为false,下面是客户端上的代码,以确保如果false,我在LogCat上打印,并看到消息=false,但我的问题是,即使我以意图启动新活动,此活动继续工作并向我显示异常,它是null指针异常,因为在onPostExceute上,将使用参数null并尝试处理它,我将f
异步任务中,如果服务器没有问题,它将在响应的标题中发送,标题isFindAQuestion
的值为false
,下面是客户端上的代码,以确保如果false
,我在LogCat上打印,并看到消息=false
,但我的问题是,即使我以意图启动新活动,此活动继续工作并向我显示异常,它是null指针异常
,因为在onPostExceute
上,将使用参数null
并尝试处理它,我将finish()
放在false语句
的末尾,但没有完成此活动
if (response.getFirstHeader("isFindAQuestion").getValue()
.toString().equals("false")) {
Log.d("message", "false");
Bundle basket = new Bundle();
basket.putString("Message", "sorry no enought questions");
Intent goToAnswerQuestion = new Intent(AnswerQuestion.this,
FinishTime.class);
goToAnswerQuestion.putExtras(basket);
startActivity(goToAnswerQuestion);
finish();
}
编辑是因为AsyncTask
正在线程上工作,所以如果活动完成,该线程将继续工作吗?如果是,我如何停止该线程?doInBackground不是在UI线程中执行的,而是在一个单独的线程中执行的:
在onPreExecute()之后立即在后台线程上调用
完成执行。此步骤用于执行后台操作
可能需要很长时间的计算
如果要停止后台操作并在UI线程上执行某些活动,最好调用cancel(),然后在UI线程上执行onCancelled回调中所需的所有内容
从AsyncTask文档中:
可以通过调用cancel(布尔值)随时取消任务。
调用此方法将导致对isCancelled()的后续调用返回true。调用此方法后,将在doInBackground(Object[])返回后调用onCancelled(Object),而不是onPostExecute(Object)。
为了确保尽快取消任务,您应该始终定期检查doInBackground(Object[])中isCancelled()的返回值,如果可能的话(例如在循环中)
在调用cancel(布尔值)并完成doInBackground(对象[])后在UI线程上运行。
默认实现只调用onCancelled()并忽略结果。如果您编写自己的实现,请不要调用super.onCancelled(result)
您好,这个if语句在doInBackground()方法中。?你可以使用这个是的,这是在doinbackground方法,我会检查链接
protected void onCancelled (Result result)