15

バックグラウンドでバックグラウンドで特定の時間にタスクTを実行したい。私はHeadless JSを使って今のところアンドロイドで可能であることがわかります。私はこのライブラリがこのhttps://github.com/vikeri/react-native-background-jobを実装していて、あなたがバックグラウンドで何かを実行できることを発見しました。特定の時刻にバックグラウンドジョブをスケジュールする方法ネイティブで反応する

これは私が探しているものではありません。特定の時間にタスクTをスケジュールすることはできません。誰もがこれについて何か回避策を知っていますか?

私はこのスレッドをチェックしましたExecute code at specific time in react native私の問題の解決策が見つかりませんでした。

答えて

5

私は同様の問題に遭遇しました。残念ながら、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); 

例:

componentDidMountに、あなたは16日の明日のためにタスクをスケジュールしたいとしましょうあなた今から予定された日付までの時間を計算できます。のは、そのための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番目の注意点として、この機能が動作するには、アプリが少なくともバックグラウンドである必要があります。

0

クラスを作成し、クラス

public static final long NOTIFY_INTERVAL = 10 * 1000; // 30 minutes 

@Override 
    public void onCreate() { 
     // cancel if already existed 
     if (mTimer != null) { 
      mTimer.cancel(); 
     } else { 
      // recreate new 
      mTimer = new Timer(); 
     } 
     // schedule task 
     mTimer.scheduleAtFixedRate(new TimeDisplayTimerTask(), 0, NOTIFY_INTERVAL); 
    } 

class TimeDisplayTimerTask extends TimerTask { 
     @Override 
     public void run() { 
      // run on another thread 
      mHandler.post(new Runnable() { 
       @Override 
       public void run() { 
        // code 
       } 
      }); 
     } 
    } 
+0

実行するサービスクラスにこのコードを配置します。 –

1

JavaScriptコードでこれを追加するには、一つだけのスレッドでフォアグラウンドで実行されます。あなたはスケジュールされたバックグラウンドタスクが必要な場合は、RN文書で説明するように、ネイティブモジュールを実装する必要があります。もちろん

https://facebook.github.io/react-native/docs/native-modules-ios.html

https://facebook.github.io/react-native/docs/native-modules-android.html

、すべてのプラットフォームの制限(特にiOS版)が適用されます。

関連する問題