暂停并恢复AsyncTask Android

时间:2016-07-05 12:52:01

标签: android multithreading android-asynctask

我的Android应用程序处理使用AsyncTask实现的线程中的业务逻辑,现在调用BL线程。

BL希望通过在UI线程上添加片段来提示用户输入一些个人数据(名称,密码...)。此时我想停止BL线程,等待用户输入他们的名字,密码......,按OK按钮然后继续BL线程。

如何在Android上实现这一目标?

3 个答案:

答案 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();
    }
  }
}