Android
नौकरी निर्धारण
खोज…
टिप्पणियों
बहुत सारे कोड चलाने या अपने JobService
अंदर भारी काम करने से सावधान रहें, उदाहरण के लिए onStartJob()
। कोड मुख्य / UI थ्रेड पर चलेगा और इसलिए अवरुद्ध UI का कारण बन सकता है, अब कोई प्रतिक्रिया देने वाला ऐप या आपके ऐप का क्रैश भी नहीं हो सकता है!
उसके कारण, आपको कार्य को AsyncTask
करना होगा, उदाहरण के लिए Thread
या AsyncTask
का उपयोग करके।
मूल उपयोग
एक नया जॉब सर्विस बनाएं
यह JobService
वर्ग को विस्तारित करने और आवश्यक तरीकों को लागू करने / onStartJob()
और onStopJob()
लागू करने के द्वारा किया जाता है।
public class MyJobService extends JobService
{
final String TAG = getClass().getSimpleName();
@Override
public boolean onStartJob(JobParameters jobParameters) {
Log.i(TAG, "Job started");
// ... your code here ...
jobFinished(jobParameters, false); // signal that we're done and don't want to reschedule the job
return false; // finished: no more work to be done
}
@Override
public boolean onStopJob(JobParameters jobParameters) {
Log.w(TAG, "Job stopped");
return false;
}
}
अपने AndroidManifest.xml में नया जॉब सर्विस जोड़ें
निम्नलिखित कदम अनिवार्य है , अन्यथा आप अपना काम नहीं चला पाएंगे:
अपने MyJobService
वर्ग को अपने AndroidManifest.xml में <application> </application>
बीच एक नए <service>
तत्व के रूप में घोषित करें।
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service
android:name=".MyJobService"
android:permission="android.permission.BIND_JOB_SERVICE" />
</application>
</manifest>
नौकरी सेट करें और चलाएं
आपके द्वारा एक नया JobService लागू करने और इसे अपने AndroidManifest.xml में जोड़ने के बाद, आप अंतिम चरणों के साथ जारी रख सकते हैं।
-
onButtonClick_startJob()
एक आवधिक नौकरी तैयार करता है और चलाता है। आवधिक नौकरियों के अलावा,JobInfo.Builder
कई अन्य सेटिंग्स और बाधाओं को निर्दिष्ट करने की अनुमति देता है। उदाहरण के लिए आप परिभाषित कर सकते हैं कि चार्जर या प्लग में काम चलाने के लिए नेटवर्क कनेक्शन की आवश्यकता होती है। -
onButtonClick_stopJob()
सभी चल रही नौकरियों को रद्द करता है
public class MainActivity extends AppCompatActivity
{
final String TAG = getClass().getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onButtonClick_startJob(View v) {
// get the jobScheduler instance from current context
JobScheduler jobScheduler = (JobScheduler) getSystemService(JOB_SCHEDULER_SERVICE);
// MyJobService provides the implementation for the job
ComponentName jobService = new ComponentName(getApplicationContext(), MyJobService.class);
// define that the job will run periodically in intervals of 10 seconds
JobInfo jobInfo = new JobInfo.Builder(1, jobService).setPeriodic(10 * 1000).build();
// schedule/start the job
int result = jobScheduler.schedule(jobInfo);
if (result == JobScheduler.RESULT_SUCCESS)
Log.d(TAG, "Successfully scheduled job: " + result);
else
Log.e(TAG, "RESULT_FAILURE: " + result);
}
public void onButtonClick_stopJob(View v) {
JobScheduler jobScheduler = (JobScheduler) getSystemService(JOB_SCHEDULER_SERVICE);
Log.d(TAG, "Stopping all jobs...");
jobScheduler.cancelAll(); // cancel all potentially running jobs
}
}
कॉल करने के बाद onButtonClick_startJob()
, काम लगभग 10 सेकंड के अंतराल में चला जाएगा, भले ही एप्लिकेशन (उपयोगकर्ता घर बटन दबाया और एप्लिकेशन और दिखाई नहीं देता) रुके हुए स्थिति में है।
onButtonClick_stopJob()
सभी रनिंग जॉब्स को रद्द करने के बजाय, आप जॉब आईडी के आधार पर किसी विशिष्ट जॉब को रद्द करने के लिए jobScheduler.cancel()
को भी कॉल कर सकते हैं।