在我离开活动之前,我有2个异步任务(服务器请求)运行。 有时运行此异步任务的活动会一直停滞,直到异步任务完成,有时下一个活动会显示并停滞,直到异步任务完成。
我的问题是如何以我的活动的UI不会卡住的方式运行此任务(UI不依赖于异步任务中的响应)
答案 0 :(得分:1)
您可能在活动代码中的某处调用了AsyncTask.get()
。如果你在任务完成执行之前调用它,它将等待直到它完成(因此使你的UI卡住)。
答案 1 :(得分:1)
你能试试吗?
答案 2 :(得分:0)
确保在第一个异步任务的onPostExecute()
上开始下一个活动。如果您在新活动中有异步任务,请将其作为onCreate方法的最后一项。遵循这些简单的规则应该有所帮助
答案 3 :(得分:0)
仅在AsyncTask
doInBackground()
中编写代码并将其调用。这样您就可以检查它是否正在访问任何UI。
例如:TestAsync extends AsyncTask...
TestAsync async = new TestAsync();
async.execute();
试试这个。
通常,AsyncTask
应该在单独的线程中运行。如果您创建两个实例。并调用execute,它应该独立执行。但是可能只有一个线程可用,所以它应该等待(在较低版本中,池大小为1。)。
@TargetApi(Build.VERSION_CODES.HONEYCOMB) // API 11
void startMyTask(AsyncTask asyncTask) {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
else
asyncTask.execute(params);
}
其他方式是,你应该在正常的线程中运行它。
答案 4 :(得分:-1)
您必须在活动中一次拨打2个活动
因此,您必须使用同步的类或函数来调用asynk任务
或者您必须使用singleton类来调用该asynk任务,以便以同步方式调用api
asynk任务使用主ui线程来完成任务,这可能是活动陷入困境的原因