15

में विशिष्ट समय पर पृष्ठभूमि नौकरी को शेड्यूल कैसे करें मैं प्रतिक्रियात्मक मूल में पृष्ठभूमि में एक दिन में विशिष्ट समय पर कुछ कार्य टी निष्पादित करना चाहता हूं। मैं देखता हूं कि अब Headless JS का उपयोग करके एंड्रॉइड में यह संभव है। मैंने पाया कि इस पुस्तकालय ने इस https://github.com/vikeri/react-native-background-job को कार्यान्वित किया है और आपको पृष्ठभूमि में सामान निष्पादित करने की अनुमति देता है।रिएक्टिव देशी

यह पूरी तरह से नहीं है जो मैं देख रहा हूं, यह आपको विशिष्ट समय पर कार्य टी निर्धारित करने की अनुमति नहीं देता है। क्या किसी को इसके लिए कोई काम पता है?

मैंने इस धागे को Execute code at specific time in react native देखा है जहां मुझे मेरी समस्या का समाधान नहीं मिला।

उत्तर

5

मैं इसी तरह के एक मुद्दे पर आया, दुर्भाग्य से, आप आरएन में सीआरओएन कार्रवाई के समान कुछ निर्दिष्ट नहीं कर सकते हैं।

इस समस्या का मेरा समाधान इस पुस्तकालय 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); 
} 

ध्यान दें कि यह समाधान एक उपयोगकर्ता अपने फोन पर समय बदल रहा है की चपेट में है। सही समाधान समय लाने के लिए कुछ बाहरी सेवा का उपयोग करना होगा।

दूसरा नोट, इस काम के लिए ऐप को कम से कम पृष्ठभूमि में होना चाहिए।

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

जावा स्क्रिप्ट कोड अग्रभूमि में चलता है इस जोड़ें। आप अनुसूचित पृष्ठभूमि कार्य की जरूरत है, तो आप आर.एन. दस्तावेज़ में वर्णित के रूप में, देशी मॉड्यूल को लागू करने की जरूरत है:

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

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

बेशक

, सभी मंच प्रतिबंध (विशेष रूप से IOS) लागू होते हैं।

संबंधित मुद्दे