2016-07-11 24 views
5

मैं एक विशिष्ट समय प्रतिदिन पर जॉबशेड्यूलर शुरू करना चाहता हूं, और इसे 3 घंटे के बाद समाप्त करना चाहता हूं।एंड्रॉइड विशिष्ट समय पर जॉबशेड्यूलर चलाना शुरू कर देता है

मेरे पास हर 20 मिनट, और 3 घंटे के लिए नौकरी ट्रिगर करने का हिस्सा है, लेकिन जॉबइन्फो.बिल्डर वर्ग में नौकरी शुरू करने के लिए कोई विकल्प नहीं है।

JobInfo.Builder वर्ग सिंहावलोकन के ऊपर जा रहे हैं, वहाँ कुछ भी नहीं है कि एक JobScheduler शुरू करने के लिए समय सेट है।

जाहिर है, मैं पूरे दिन के लिए इसे चलाने, और समय से मेल खाता है, यह अधिक बैटरी की जरूरत की तुलना में नाली जाएगा, और बुरा कार्यक्रमों की है कि जाँच करने के लिए नहीं करना चाहती।

मैं निर्दिष्ट समय पर चलाने के लिए अलार्म बनाने की सोच रहा था और इस नौकरी को ट्रिगर करता था, लेकिन ऐसा लगता है कि यह थोड़ा अधिक है।

JobInfo.Builder builder = new JobInfo.Builder(NIGHT_SYNC_JOB_ID, 
new ComponentName(context, NightSyncDataJobService.class)); 

//Job starts at 11pm, and ends at 2am. Running every 20 minutes. 
builder.setPersisted(true); //Job scheduled to work after reboot 
builder.setPeriodic(Consts.ONE_MINUTE * 20); 

JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE); 
jobScheduler.schedule(builder.build()); 

आप इस मुद्दे को किसी अन्य समाधान है, तो AlarmManger कि इस JobScheduler से चलाता है के बगल में, बहुत सराहना की जाएगी।

उत्तर

2

मैं निम्नलिखित तरीके से हासिल की (AlarmManager बिना), एक नई नौकरी (एक अनूठा JOB_ID जाहिर है) के साथ बनाया है, और भविष्य में कुछ समय setOverrideDeadline() प्रयोग करने के लिए यह शेड्यूल करने के लिए JobScheduler बताया।

private JobInfo getJobInfoForFutureTask(Context context, 
             long timeTillFutureJob) { 
     ComponentName serviceComponent = new ComponentName(context, SchedulerService.class); 

     return new JobInfo.Builder(FUTURE_JOB_ID, serviceComponent) 
       .setRequiredNetworkType(JobInfo.NETWORK_TYPE_NONE) 
       .setOverrideDeadline(timeTillFutureJob) 
       .setRequiresDeviceIdle(false) 
       .setRequiresCharging(false) 
       .setPersisted(true) 
       .build(); 
    } 

सही समय ऑफसेट, जिस पर आप कार्य शेड्यूल करने के लिए है और यह भी JobScheduler से कोई भी मौजूदा नौकरी आईडी को दूर चाहते गणना करने के लिए सुनिश्चित करें:

यहाँ एक टुकड़ा जो उपयुक्त हो सकती हैं।

+0

रोज़ाना शेड्यूल करने के बजाय मैं विशिष्ट दिनों के लिए नौकरी निर्धारित करना चाहता हूं (बस रविवार, बुधवार, शनिवार के लिए कहें), क्या यह जॉबशेडुलर @prerak –

+1

का उपयोग करना संभव है, मुझे यकीन नहीं है कि एकमात्र तरीका मैं सोच सकता हूं कि आप मौजूदा नौकरी और ऑफसेट के साथ एक भविष्य एक पुनर्निर्धारित। इसमें कुछ गणित को शामिल करने की आवश्यकता है: डी – prerak

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