【问题标题】:Android Background Task SelectionAndroid后台任务选择
【发布时间】:2019-09-11 21:56:06
【问题描述】:

我有一个 Android“购物车”应用供企业客户下订单(企业对企业)。我想在后台运行一个任务来同步项目和订单。但我无法确定应该使用哪些后台任务选项(异步任务、服务、同步适配器、Jetpack 工作管理器等)。

首先,一些背景说明:

  • 我们正在向客户提供 Android 手机。
  • 手机运行的是 Android 6 (API 23)
  • 我不担心电池寿命,因为这些手机一次只能使用一个小时(或更短时间)。
  • 后台处理不需要在应用程序范围之外运行,因为应用程序将始终处于打开状态(我计划将其作为默认启动器)。

这是我的要求:

  • 一些同步任务应该每隔几秒运行一次(订单),其他同步任务应该每隔半小时运行一次(项目更新)。
  • 应用程序需要能够停止和重新启动特定用户事件的后台同步(如删除和重新创建 sqlite 数据库)
  • 一次只能运行一个同步进程。

如果有的话会很高兴:

  • 上传订单后,后台任务会通知应用程序。
  • 同步进程完全关闭(允许它完成一个同步周期),而不是直接被杀死。
  • 如果应用程序可以向后台同步发送消息,那么它可以启动按需订单同步,从而无需后台进程每隔几秒就检查数据库文件是否有新订单。 (我仍然希望定期运行 30 分钟同步以实现较低优先级的项目同步)。

有人想分享他们推荐的内容吗?我想知道我是否应该一直在后台运行一个进程。这样,它可以通过 sleep 语句控制时间,每隔几秒处理一些同步,而另一些每半小时处理一次。那么,将其作为一项服务有意义吗?

我当然感谢您的意见!非常感谢!

【问题讨论】:

    标签: android kotlin


    【解决方案1】:

    我决定使用 ScheduledExecutorService。这是否是最好的选择,我不知道。但它确实给了我最需要的东西:

    • 一次只运行一个实例。
    • 我可以根据需要启动和停止。
    • 它确实超出了应用程序的范围(我并不真正需要,但拥有它可能会很好)
    • 当我希望 Runnable 类终止时,它会继续循环检查 Preference Boolean。
    • 在循环之间我有几秒钟的睡眠。所以每隔几秒我就会检查一下是否有任何 SQLite 记录需要处理。
    • 对于我只想降低运行频率的进程,我只有一个计数器来跟踪自上次运行这些进程以来执行的睡眠周期数。
    • 虽然我确信还有一些对电池更友好的选项,但我并不认为这会消耗太多电池(我也不需要关心这个特定的应用程序)
    • WorkManager 似乎对我不起作用,因为我不能长时间运行进程(超过 10 分钟),并且我希望我的后台任务能够持续运行。

    虽然我认为我有一个可行的配置,但我仍然愿意接受任何人想分享的任何想法。

    谢谢!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多