এখানে পোস্ট করা বেশিরভাগ সমাধান একটি গুরুত্বপূর্ণ টুকরো অনুপস্থিত: একটি ওয়েক লক ছাড়াই এটি করা আপনার পরিষেবাটি প্রক্রিয়া শেষ হওয়ার আগেই মারা যাওয়ার ঝুঁকি নিয়ে চলেছে। এই সমাধানটি অন্য থ্রেডে দেখেছি, এখানেও উত্তর দিচ্ছি।
যেহেতু ওয়েকফুলড্রোডকাস্ট রিসিভারটি এপিআই 26-তে অবমূল্যায়ন করা হয়েছে এটি 26 এর নীচে এপিআই স্তরের জন্য প্রস্তাবিত
আপনার একটি ওয়েক লকটি পাওয়া দরকার। ভাগ্যক্রমে, সমর্থন লাইব্রেরি আমাদের এটি করার জন্য একটি ক্লাস দেয় :
public class SimpleWakefulReceiver extends WakefulBroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// This is the Intent to deliver to our service.
Intent service = new Intent(context, SimpleWakefulService.class);
// Start the service, keeping the device awake while it is launching.
Log.i("SimpleWakefulReceiver", "Starting service @ " + SystemClock.elapsedRealtime());
startWakefulService(context, service);
}
}
তারপরে, আপনার পরিষেবাতে, জাগ্রত লকটি প্রকাশ করতে ভুলবেন না:
@Override
protected void onHandleIntent(Intent intent) {
// At this point SimpleWakefulReceiver is still holding a wake lock
// for us. We can do whatever we need to here and then tell it that
// it can release the wakelock.
...
Log.i("SimpleWakefulReceiver", "Completed service @ " + SystemClock.elapsedRealtime());
SimpleWakefulReceiver.completeWakefulIntent(intent);
}
ডাব্লুএক।
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
...
<service android:name=".SimpleWakefulReceiver">
<intent-filter>
<action android:name="com.example.SimpleWakefulReceiver"/>
</intent-filter>
</service>
startForeground()
আপনার পরিষেবা ব্যবহার করুন। অন্যথায়, অ্যান্ড্রয়েড এবং এর ব্যবহারকারীরা আপনার পরিষেবাটি জায়গার অপচয় হিসাবে শেষ করে দেবে, এবং অ্যান্ড্রয়েড বাজারে আপনি কিছু অপ্রীতিকর মন্তব্য পেয়ে যাবেন। বেশিরভাগ পরিস্থিতি যেখানে আপনি মনে করেন যে আপনি কোনও পরিষেবা বুট করার সময় শুরু করতে চান, আপনাকে ব্যবহার করে আরও ভাল পরিবেশিত হবেAlarmManager
যাতে আপনার পরিষেবা নিয়মিত না হয়ে সময়-সময় চলতে পারে ।