我的Android应用程序处理使用AsyncTask实现的线程中的业务逻辑,现在调用BL线程。
BL希望通过在UI线程上添加片段来提示用户输入一些个人数据(名称,密码...)。此时我想停止BL线程,等待用户输入他们的名字,密码......,按OK按钮然后继续BL线程。
如何在Android上实现这一目标?
答案 0 :(得分:0)
AsyncTask应该执行单次/一次性任务。
这不是AsyncTask的好用。 AsyncTasks应该工作并完成,而不是试着闲逛。
例如,您可以使用Thread.sleep()在Web上找到脏解决方案。这些都是糟糕的解决方案。
如果您需要两个不同的流程,则应创建两个不同的任务
对于您的问题,您可以取消()您的后台线程或asynsTask,并在需要时创建一个带有更新参数的新线程
答案 1 :(得分:0)
你不应该在一个AsyncTask中完成所有工作..
使用OK按钮创建片段时,定义新的按钮侦听器,该侦听器将创建新线程并执行其余的工作。
您可能希望使用服务或服务意图而不是AsyncTask,因此您可以将任务分离为单独的功能并仍然保持后台运行。
答案 2 :(得分:0)
暂停AsynkTask不是最佳选择。您仍然可以找到在ImageWorker
类中的Google示例应用DisplayingBitmaps中暂停AsynkTask的示例。
private class BitmapWorkerTask extends AsynkTask<Void, Void, BitmapDrawable> {
@Override
protected BitmapDrawable doInBackground(Void... params) {
synchronized (mPauseWorkLock) {
while (mPauseWork && !isCancelled()) {
try {
mPauseWorkLock.wait();
} catch (InterruptedException e) {}
}
}
}
...
}
public void setPauseWork(boolean pauseWork) {
synchronized(mPauseWorkLock) {
mPauseWork = pauseWork;
if (!mPauseWork) {
mPauseWorkLock.notifyAll();
}
}
}