खोज…


टिप्पणियों

बहुत सारे कोड चलाने या अपने 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() को भी कॉल कर सकते हैं।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow