Open5
Android WebView 内の JavaScript で RxJS の bufferTime/timeout等 を使うと端末スリープ後5分経過で subscribe が来なくなる件
ガワネイティブな Android アプリで端末をスリープにして5分くらい経過すると Web 側で使っている RxJS のタイマー系(timeout とか bufferTime)がバグって? subscribe が来ないという興味深い事象に遭遇している(困った)。
RxJS を使わない処理では問題ないので WebView の wake lock とかそういう事ではないと思う。
突き詰めたらどうせ setTimeout とか setInterval だろうから RxJS じゃなくても起こりそう。
Android WebView でスリープ中に setTimeout がコールバックを呼ばないとしたら、WakeLock API で解決できるのかも知れない。
iOS の WKWebView ではこの問題は発生しない。
WakeLock を試そうと
のif ('wakeLock' in navigator) {
isSupported = true;
statusElem.textContent = 'Screen Wake Lock API supported!';
} else {
wakeButton.disabled = true;
statusElem.textContent = 'Wake lock is not supported by this browser.';
}
を実行してみたけど "Wake lock is not supported by this browser" の方へいってしまう。
Android System WebView のバージョンは 97.0 を超えてるけど、関係ないのかなあ?
- HUAWEI Nova lite 3
- Xperia 1 II
で確認。
RxJS の bufferTime を使わないようにして回避はできるけど、
Web 側で Angular を使っていて、さらに Angular の HttpClient が RxJS に依存しているので?、通信(post)も送れなくなっている。
スリープから復帰すると、一気に post される。
HttpClient を fetch に代えて試す必要がある。