0

私はバックグラウンドでデータを送信するために使用GcmTaskServiceしています。ほとんどの場合、うまく機能しますが、最近、データがデバイスから送信されていないというクライアントから 1 件の苦情を受けました。デバイスを持ってきましたが、GcmTaskService の onRunTask がこの特定のデバイスで呼び出されていないことに気付きました。

これは私がサービスを開始する方法です:

GcmNetworkManager gcmNetworkManager = GcmNetworkManager.getInstance(FarmWorkApplication.context);
        Class<FarmWorkSyncOutService> gcmTaskService = FarmWorkSyncOutService.class;
        String name = gcmTaskService.getName();
        gcmNetworkManager.cancelTask(name, gcmTaskService);
        OneoffTask task = new OneoffTask.Builder()
                .setService(gcmTaskService)
                .setTag(name)
                .setExecutionWindow(0L, maxDelay)
                .setRequiredNetwork(Task.NETWORK_STATE_CONNECTED)
                .build();
        gcmNetworkManager.schedule(task);

これはマニフェストのサービス定義です:

<service android:name=".FarmWorkSyncOutService"
        android:permission="com.google.android.gms.permission.BIND_NETWORK_TASK_SERVICE"
        android:exported="true">
        <intent-filter>
            <action android:name="com.google.android.gms.gcm.ACTION_TASK_READY"/>
        </intent-filter>
    </service>

デバイスはWIFIでインターネットに接続されており、インターネットを非常にうまくサーフィンしています。

この行:

gcmNetworkManager.cancelTask(name, gcmTaskService);

サービスが一度実行されることを保証するためだけに、私もそれを削除しようとしましたが、役に立ちませんでした

GooglePlayServices を強制停止してそのデータを削除しようとしましたが、これをデバッグするために他に何ができるでしょうか? なぜこれが起こる可能性があるのか​​ わかりましたか?

4

1 に答える 1

0

これは省電力モードのせいでした。無効にすると、デバイスは同期を開始しました。サービスがバックグラウンドでまったく実行されないようにするのは賢明だったのでしょうか...

于 2017-12-17T08:51:18.620 に答える