我遇到了一个问题,我的应用程序用户无法通过某个点。
当用户尝试登录时,它会登录,但之后我使用以下代码通过“OneoffTask”访问 API:
OneoffTask task = new OneoffTask.Builder()
.setService(SyncService.class)
.setTag(TaskConstants.UPLOAD_STREAK)
.setExecutionWindow(0L, 200)
.setRequiredNetwork(Task.NETWORK_STATE_CONNECTED)
.setPersisted(true)
.setUpdateCurrent(true)
.build();
GcmNetworkManager mGcmNetworkManager = GcmNetworkManager.getInstance(MainApplication.getContext());
mGcmNetworkManager.schedule(task);
这段代码执行了,但是定时任务没有执行。三星 s8 型号:SM-G950F。它适用于所有其他设备。为什么是这个问题,我也没有收到错误。它只是卡在那里。
最佳答案
我无法发表评论,所以我对您所面临的问题做出了一些假设,希望我能做出正确的判断。如果不是这种情况,请告诉我。
Samsung S8 应该升级到 Android 8.0 (Oreo) 了吧?
在 Oreo 中,您需要以不同的方式处理一些限制。
Android 8.0 限制了应用在用户不直接与其交互时可以执行的操作。应用程序受到“后台服务限制”和“广播限制”两种方式的限制,引用:https://developer.android.com/about/versions/oreo/background#overview
GcmNetworkManager 还要求用户安装“播放服务”,您必须确保检查这一点。 GCM 也很快被弃用,因此寻找其他解决方案,例如由 FCM 取代:https://developers.google.com/cloud-messaging/android/client (另请参阅确保 S8 满足这些要求的要求)。
为确保 GcmNetworkManager 调度程序按预期工作,您需要将其与 JobScheduler 结合使用。我找到的最佳引用是:https://github.com/yigit/android-priority-jobqueue/wiki/Integration-with-JobScheduler-and-GcmNetworkManager
我对 JobScheduler 的体验是,它在我测试过的所有较新设备(Android 6.0 --> 8.0)上运行良好,因此希望您不需要那么多“奥利奥逻辑”。
请让我知道这是否让您朝着正确的方向前进:)
关于android - SM-G950F(Samsung s8) 运行 OneoffTask 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52677252/