START_STICKY রিটার্ন টাইপের ব্যবহার এবং ব্যাখ্যা
Android Service-এ onStartCommand()-এর রিটার্ন টাইপ নির্ধারণ করে সিস্টেম সার্ভিস কিল করলে কী হবে। START_STICKY সবচেয়ে সাধারণ এবং ডিফল্ট বিয়হেভিয়র।
START_STICKY কী?
- যদি সিস্টেম মেমরি ফাঁকিয়ে সার্ভিস কিল করে, তবে সিস্টেম সার্ভিসটি রিস্টার্ট করবে
- রিস্টার্টের সময়
onStartCommand()-এintent = nullআসবে - ইউজার ইন্টারঅ্যাকশন ছাড়াই স্বয়ংক্রিয় রিস্টার্ট হয়
- মিডিয়া প্লেয়ার, লোকেশন ট্র্যাকার এর মতো গুরুত্বপূর্ণ ব্যাকগ্রাউন্ড টাস্কের জন্য উপযুক্ত
অন্যান্য রিটার্ন টাইপ সমূহ
| রিটার্ন টাইপ | বিবরণ |
|---|---|
| START_STICKY | কিল হলে রিস্টার্ট, intent null |
| START_NOT_STICKY | কিল হলে রিস্টার্ট করবে না, শুধু পেন্ডিং ইন্টেন্ট থাকলে |
| START_REDELIVER_INTENT | কিল হলে রিস্টার্ট এবং শেষ intent রিডেলিভার করবে |
বাস্তবায়ন উদাহরণ
package com.example.myapplication;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;
public class StickyService extends Service {
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
Log.d("StickyService", "onCreate called");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
String action = (intent != null) ? intent.getAction() : "RESTARTED_BY_SYSTEM";
Log.d("StickyService", "onStartCommand: " + action);
Toast.makeText(this, "Service: " + action, Toast.LENGTH_SHORT).show();
return START_STICKY; // কী পয়েন্ট
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d("StickyService", "onDestroy called");
Toast.makeText(this, "Service Destroyed", Toast.LENGTH_SHORT).show();
}
}
টেস্টিং পদ্ধতি
- অ্যাপ রান করুন, সার্ভিস স্টার্ট করুন
- Developer Options → "Don't keep activities" অন করুন
- অথবা ADB কমান্ড দিন:
adb shell kill [pid] - Logcat-এ "RESTARTED_BY_SYSTEM" মেসেজ দেখুন
সতর্কতা
- START_STICKY সার্ভিসকে "অমর" করে দেয় না - সিস্টেম অতিরিক্ত প্রেশার থাকলে পরমানেন্টলি কিল করতে পারে
- অ্যান্ড্রয়েড ৮+ এ ব্যাকগ্রাউন্ড সার্ভিসে সীমাবদ্ধতা আছে, Foreground Service ভালো বিকল্প
- WorkManager বা JobScheduler ব্যবহার করুন periódicos টাস্কের জন্য
