0

いくつかの正当な理由により、ウェアラブルで通知を作成します。モバイルでも同じものを表示するので、通知の削除を同期する必要があります。ウェアラブルとモバイルで通知が削除されるまでにかなりの時間がかかることがわかりました。最初は、これは私が使用している DataAPI に関連していると思いましたが、間違っていました。削除インテントは非常に遅れて呼び出されますが、その理由はわかりません。

ここで私の(きれいな)logcat出力を確認してください:

-- Wearable --
09:31:45.007 D/FitnessWatchface﹕ onVisibilityChanged : false
09:31:48.008 D/FitnessWatchface﹕ onVisibilityChanged : true
09:31:52.929 D/NotificationHelper﹕ Got action my.package.name.NOTIFICATION_DISCARDED
09:31:52.963 D/DataAPI﹕ Discard message send out to mobile
09:31:53.052 I/art﹕ WaitForGcToComplete blocked for 10.697ms for cause DisableMovingGc
09:31:53.071 D/DataAPI﹕ Wrote successful wear://1d8...5d7/notification/discard/2
09:31:53.073 D/DataLayerListener﹕ onDataChanged invoked

-- Smartphone --
09:31:53.075 D/DataLayerListener﹕ onMessageReceived: /notification/discard/2
09:31:53.075 D/DataLayerListener﹕ Forwarding DISCARD event to receiver...
09:31:53.075 D/Broadcast﹕ Got DISCARD for type 
09:31:53.075 D/NotificationHelper﹕ removeNotification()
09:31:53.165 D/DataLayerListener﹕ onDataChanged: wear://1d8...5d7/notification/discard/2
09:31:53.165 D/DataLayerListener﹕ Forwarding DISCARD event to receiver...
09:31:53.165 D/Broadcast﹕ Got DISCARD for type 
09:31:53.165 D/NotificationHelper﹕ removeNotification()

ご覧のとおり、ウォッチフェイスが表示され、次の logcat 出力が書き込まれるまで約 5 秒かかります。

削除の保留中の意図を作成するコードは次のとおりです。

Intent intent = new Intent(context, NotificationHelper.class);
intent.setAction(NOTIFICATION_DISCARDED);
intent.putExtra(NOTIFICATION_INPUT_TYPE, type);
// prevents that the intent is overridden by the system with similar ones
intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
return PendingIntent.getBroadcast(context, 6434, intent, PendingIntent.FLAG_ONE_SHOT);

遅延を説明する何かが見えますか? さらにコードを見たい場合は、コメントを残してください。

この質問を送信する前に、たとえば WhatsApp と比較したタイミングを比較しました。遅延もありますが、少し速いようです(ただし、測定していません)。

4

1 に答える 1