私はReact Nativeでバックグラウンドで特定の時間にいくつかのタスクTを実行したいです。今のところAndroidでそれが可能であることがわかりました。ヘッドレスJSこのライブラリはこれを実装していることがわかりましたhttps://github.com/vikeri/react-native-background-jobバックグラウンドで何かを実行できるようになります。
これは私が探しているものとは完全に異なります。特定の時間にタスク T をスケジュールすることはできません。これを回避する方法を誰か知っていますか?
このスレッドを確認しました反応ネイティブで特定の時間にコードを実行する問題の解決策が見つからなかった場所。
ベストアンサー1
同様の問題に遭遇しましたが、残念ながら、RN では CRON アクションに似たものを指定することはできません。
その問題に対する私の解決策はこのライブラリを使うことですhttps://github.com/ocetnik/react-native-background-timer現在の時刻とタスクがスケジュールされている時刻の差を計算します。
計算された時間はミリ秒単位なので、提供されている関数で使用できますsetTimeout
。
// Start a timer that runs once after X milliseconds
const timeoutId = BackgroundTimer.setTimeout(() => {
// this will be executed once after 10 seconds
// even when app is the the background
console.log('tac');
}, 10000);
例:
明日 16 日にタスクをスケジュールしたいとします。componentDidMount
現在からスケジュールされた日付までの時間を計算できます。そのためには、次の式を使用しますmoment
。
componentDidMount(){
const scheduledDate =
moment().add(1,'d').set({hour:16,minute:0,second:0,millisecond:0})
const diffTime = scheduledDate.diff(moment())
this.timeoutId = BackgroundTimer.setTimeout(() => {
console.log('tac');
}, diffTime);
}
componentWillUnmount(){
BackgroundTimer.clearTimeout(this.timeoutId);
}
このソリューションは、ユーザーが携帯電話の時刻を変更すると脆弱になることに注意してください。最適なソリューションは、外部サービスを使用して時刻を取得することです。
2 つ目の注意点として、これが機能するには、アプリが少なくともバックグラウンドにある必要があります。