2017-11-27 17 views
11

Firebase JobDispatcher प्रलेखन से के रूप में Firebase JobDispatcherफ़ायरबेस जॉबडिस्पाटर नौकरी सेवा 2 बार क्यों चलाता है?

setTrigger(Trigger.executionWindow(0, 60)) 
// start between 0 and 60 seconds 

लेकिन क्यों मेरे sevice दो समय चल रहा

Firebase JobDispacther कोड

FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(this)); 
    Job job = dispatcher.newJobBuilder() 
      .setTag("testing job") 
      .setService(TestingJob.class) 
      .setReplaceCurrent(true) 
      .setRecurring(true) 
      .setTrigger(Trigger.executionWindow(0,1)) 
      .setConstraints(Constraint.ON_ANY_NETWORK) 
      .setLifetime(Lifetime.FOREVER) 
      .build(); 

    dispatcher.mustSchedule(job); 

परीक्षण वर्ग (जे ओब सेवा)

public class TestingJob extends JobService { 

    private static final String TAG = "TestingJob"; 
    private int i =0; 
    @Override 
    public boolean onStartJob(JobParameters job) { 

     Log.d(TAG, "onStartJob Testing Job: "+new Date().toString()); 
     Log.d(TAG, "onStartJob: i = "+String.valueOf(i)); 
     i+=1; 
     return false; 
    } 

    @Override 
    public boolean onStopJob(JobParameters job) { 

     Log.d(TAG, "onStopJob Testing Job: Stopped"); 
     return false; 
    } 
} 

लॉग बिल्ली

11-28 00:08:57.666 11793-11793: onStartJob Testing Job: Tue Nov 28 00:08:57 GMT+05:00 2017 
11-28 00:08:57.666 11793-11793: onStartJob: i = 0 
11-28 00:08:57.791 11793-11793: onStartJob Testing Job: Tue Nov 28 00:08:57 GMT+05:00 2017 
11-28 00:08:57.791 11793-11793: onStartJob: i = 0 

प्रकट

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
    <service android:name=".services.TestingJob" 
      android:exported="false"> 
     <intent-filter> 
      <action android:name="com.firebase.jobdispatcher.ACTION_EXECUTE"/> 
     </intent-filter> 
    </service> 

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

Thnx आपका सहायता

+1

मैं एक ही मुद्दे से जूझ रहा हूं, हालांकि, मैं एक ट्रिगर के रूप में एक सामग्री यूआरआई का उपयोग कर रहा हूं। यह समस्या उन दोनों उपकरणों पर हुई है जिनके साथ मैं परीक्षण करता हूं, लेकिन यदि मैं एक अनुरूपित वातावरण में एप्लिकेशन बनाता हूं तो यह केवल एक बार चलता है। –

उत्तर

3

मुझे लगता है कि कुछ है, जो हमने किया जाना चाहिए पता है के बारे में यह

FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(this)); 
    Job job = dispatcher.newJobBuilder() 
      .setTag("testing job") 
      .setService(TestingJob.class) 
      .setReplaceCurrent(true) 
      .setRecurring(true) 
      .setTrigger(Trigger.executionWindow(0,1)) 
      .setConstraints(Constraint.ON_ANY_NETWORK) 
      .setLifetime(Lifetime.FOREVER) 
      .build(); 

    dispatcher.mustSchedule(job); 
इस में

आप
.setRecurring(true) सेट: इसका मतलब है कि यह लगातार दोहरा रहे हैं।

शुरू: आरंभ और अंत .setTrigger(Trigger.executionWindow(start, end)) साथ ट्रिगर सेट windowStart है, जो जल्द से जल्द समय (सेकंड में) है के रूप में जानते है काम चलने के लिए योग्य माना जाना चाहिए। जब नौकरी निर्धारित की गई थी (नई नौकरियों के लिए)

अंत: खिड़की के रूप में पता है, नवीनतम समय (सेकंड में) नौकरी एक आदर्श दुनिया में चलनी चाहिए। विंडोस्टार्ट के समान ही गणना की गई।

.setReplaceCurrent(false): इसका मतलब है कि एक ही टैग के साथ मौजूदा नौकरी को ओवरराइट न करें।

आशा है कि यह आपकी मदद करेगा !!

+0

thnx के लिए कोई अन्य दस्तावेज नहीं पता :) – Salman500

+0

@ सलमान 500 आपका स्वागत है !! –

2

के लिए मुझे लगता है कि कारण है कि यह 2 बार चलाता है आपके निष्पादन खिड़की है।

.setTrigger(Trigger.executionWindow(0,1)) 

केवल 1 सेकंड की विंडो है। (0, 60) जैसे व्यापक अंतराल के साथ प्रयास करें, यह चाल चलनी चाहिए।

अपने चर i के बारे में अपने अन्य सवाल का जवाब करने के लिए, आप इसे स्थिर करना है:

private static int i = 0; 
+0

कैसे मैं अपनी नौकरी सेवा चला सकते हैं हमेशा के लिए – Salman500

+0

आप Firebase JobDispatcher के लिए GitHub और मध्यम जवाब @VollyNoob – Salman500

+0

0,60 के लिए किसी अन्य संसाधन thnx से नहीं किसी भी प्रलेखन पता भी दो बार चल रहा है TestingJob: onStartJob परीक्षण नौकरी : गुरु नवम्बर 30 16:25:27 जीएमटी + 05: 00 2017 परीक्षण जॉब: ऑनस्टार्ट जोब: i = 0 परीक्षण जॉब: ऑनस्टार्ट जॉब परीक्षण नौकरी: गुरु नवम्बर 30 16:25:27 जीएमटी + 05: 00 2017 परीक्षण जॉब: ऑनस्टार्ट जॉब: i = 0 – Salman500

1

आपका int i हर बार नहीं बढ़ेगी।

setTrigger(Trigger.executionWindow(0, 60)) 

और यह जॉब ट्रिगर यह निर्धारित करेगा कि बनाई गई नौकरी अब निष्पादित करने के लिए तैयार है। आपने 0 से 1 सेकंड की निष्पादन विंडो निर्दिष्ट की है। यही कारण है कि आपका काम हर दूसरे में ट्रिगर कर रहा है।

यह ट्रिगरिंग महत्वपूर्ण है क्योंकि पुनरावर्ती नौकरियों को हमेशा निष्पादन विंडो ट्रिगर की आवश्यकता होती है। बेशक, यदि आपका काम आवर्ती नहीं है, तो आपको इसके लिए कोई ट्रिगर सेट करने की आवश्यकता नहीं है।

आपका पहला पैरामीटर 2 नौकरियों के बीच सेकंड में अंतराल का समय है और दूसरा पैरामीटर अंतराल समय + सेकेंड में सिंक्रनाइज़ फ़्लीक्टाइम है।

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