代码之家  ›  专栏  ›  技术社区  ›  Bostone

Android:如何正确地等待服务过程完成

  •  4
  • Bostone  · 技术社区  · 16 年前

    以下是场景:

    1. 第一个活动是登录视图/搜索页。第二个活动显示搜索结果
    2. 搜索总是针对内部SQLite数据库执行
    3. 如果用户在更新过程中执行搜索,我希望等到更新结束,同时显示“请稍候”进度警报。在刷新完成之前,我不想查询和显示搜索结果。
    4. 数据库更新由AlarmManager触发,并由服务执行,该服务在更新过程中将“更新”状态放入数据库
    5. 我可以轻松地查询状态,但如何等待并定期重新查询数据库?我使用AsyncTask来处理搜索结果,我的下意识反应是将wait()循环放入 AsyncTask#doInBackground 方法,但这是危险的,根本不起作用,因为我没有控制UI线程,所以我最终 IllegalMonitorStateException .

    另外,我将“wait”代码放在Runnable中,甚至在我开始异步任务之前就执行它。它起作用了。 Thread.sleep(2000) 我仍然不确定这样做是否安全。有没有人在这方面有经验 FutureTask

    2 回复  |  直到 16 年前
        1
  •  2
  •   CommonsWare    16 年前

    如果用户在 更新我想等到更新 进度警报。我不想质疑 并显示搜索结果直到

    这是你的决定,但请记住你是在制造你自己的问题。就我个人而言,我会放弃这个要求。不应该仅仅因为闹钟响了就给用户带来不便。

    例如,您可以禁用警报,并在活动消失时重新启用它。

    什么是“正确”的方法 正确等待(状态可能为偶数)

    当更新完成时,让服务通过某种回调或广播意图通知活动。保持进度指示器处于活动状态,直到发生这种情况。这仍然会带来一些时间上的挑战,这就是为什么我要放弃这个需求。

        2
  •  0
  •   Bostone    16 年前

    感谢马克(一如既往)的有用见解。在这里,我将概述(在我看来)应该如何完成上述场景:

    1. 如果您不能绑定到服务,那么它就不会运行,因此不需要使用它-只需查询数据库并执行您需要的操作