【问题标题】:reuse intent service code in asynctask在 asynctask 中重用意图服务代码
【发布时间】:2016-01-15 12:56:56
【问题描述】:

在我的 Android 应用程序中,我使用意图服务来检索我的应用程序的重要数据并将它们存储在我的 SQL 数据库中。我定期使用警报管理器启动此服务。

当用户启动应用程序时,活动会在数据库中检查所需数据是否存在。

  • 如果是,则显示标准 UI
  • 如果没有,我必须让用户等待并启动数据下载

我的问题是:当 DL 从 Activity 启动时,如何使用异步任务重用我在 Intent 服务中编写的大部分代码?

您介意与我分享您的最佳做法和建议吗?

非常感谢您的帮助!

【问题讨论】:

    标签: android android-asynctask android-service


    【解决方案1】:

    根据我对您问题的理解。
    您应该从活动中调用意图服务并使用广播接收器来处理数据库中发生的任何更改。并更新您的用户界面。意味着首先开始你的

    1) Intent 服务在收到回调后调用您的 Web 服务
    2) 插入数据库。
    3) 申请contentobserver 观察数据库中的任何变化(通过观察特定的URI)
    4)并根据数据库的变化更新你的用户界面

    【讨论】:

    • 您好 mcd,我同意您的解决方案。但是,恕我直言,使用意图服务和广播接收器与 UI 进行通信并不是很方便。 Asynctask 就是为此而设计的,并且做得很好。这就是为什么我想在 UI 请求 HTTP 工作时使用 AsyncTask,并在安排警报时使用意图服务。尽可能重复使用相同的代码!
    • 你确定 asynctask 适合它并且是为它设计的吗?我认为 asynctask 不适合长时间运行的任务(如网络操作)。
    • 好的!让我们尝试实施您的解决方案。谢谢你的帮助。使用您的解决方案,我仍然有一个问题:如果我的网络任务失败,我的 UI 怎么能得到通知?
    • 您可以使用本地广播管理器和 sharedprefrence 来管理 httprequest 状态。为正常、网络错误、服务器错误的服务器响应创建常量。如果用户在前台,本地广播将帮助您,如果用户在后台并再次出现 sharedprefrence 值将解决您的问题。
    • 在我当前的项目中,我正在使用 volley 库,并且它的响应使用意图服务插入到 db 中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    • 2016-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多