【问题标题】:Http request in background with Firebase job dispatcher: asynchronous or synchronous?使用 Firebase 作业调度程序在后台发出 Http 请求:异步还是同步?
【发布时间】:2017-09-28 11:01:08
【问题描述】:

我正在使用 Firebase Job Dispatcher 并按照https://github.com/firebase/firebase-jobdispatcher-android/blob/master/README.md 中的说明进行设置。

要调度的作业是一个 http 请求。 http 请求可以在应用处于前台(用户正在查看)时运行,或者在应用处于后台/未启动时运行。

应该将 http 请求(使用 the okhttp library)放在单独的线程/异步中,还是我可以直接从 JobService 调用它?

【问题讨论】:

    标签: android asynchronous android-jobscheduler firebase-job-dispatcher


    【解决方案1】:

    JobService 扩展 Service 所以它在主线程上运行。因此,您不应该直接进行网络调用。但是,您可以通过SimpleJobService 直接拨打电话。

    我认为在JobService 中使用SimpleJobService 比在JobService 中使用AsyncTask 更好,因为您可以看到here,它已经以自己的方式做到了。

    【讨论】:

    • 感谢您提及 JobService 类本身。我检查了 JobService 上的 Documentatieonderdelen,它指出:“该服务在应用程序主线程上运行的处理程序上执行每个传入作业。这意味着您必须将执行逻辑卸载到您选择的另一个线程/处理程序/AsyncTask。不这样做会导致阻塞来自 JobManager 的任何未来回调 - 特别是 onStopJob(android.app.job.JobParameters),它旨在通知您不再满足调度要求。”所以网络调用必须有自己的线程。
    • 没错。至于 OkHttp,调用 JobService 内部的异步 enqueue() 方法就足够了。在SimpleJobService 中,可以直接调用同步的execute() 方法,因为SimpleJobService 在单独的AsyncJobTask 中执行给定的工作。
    • SimpleJobService +1。我在github.com/firebase/firebase-jobdispatcher-android 的源代码中找到了它。你是怎么找到这门课的?在他们 github 帐户上的 README.md 中,我找不到任何 API 文档,甚至找不到 javadoc。你有更多这方面的信息吗?
    • 我想我是在自述文件中给出的 I/O 演示链接中第一次看到的:youtu.be/VC2Hlb22mZM?t=30m23s。回答this answer 中的第 10 个问题也很有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    相关资源
    最近更新 更多