ওয়েকআপ হলো AlarmManager API-এর একটি প্রক্রিয়া, যা ডেভেলপারদের একটি নির্দিষ্ট সময়ে ডিভাইসকে জাগিয়ে তোলার জন্য অ্যালার্ম সেট করতে দেয়। আপনার অ্যাপ AlarmManager এর set() মেথডগুলোর যেকোনো একটিকে RTC_WAKEUP অথবা ELAPSED_REALTIME_WAKEUP ফ্ল্যাগসহ কল করার মাধ্যমে একটি ওয়েকআপ অ্যালার্ম সেট করে। যখন একটি ওয়েকআপ অ্যালার্ম ট্রিগার হয়, তখন ডিভাইসটি লো-পাওয়ার মোড থেকে বেরিয়ে আসে এবং অ্যালার্মের onReceive() বা onAlarm() মেথডটি এক্সিকিউট করার সময় একটি পার্শিয়াল ওয়েক লক ধরে রাখে। যদি ওয়েকআপ অ্যালার্ম অতিরিক্ত পরিমাণে ট্রিগার হয়, তবে তা ডিভাইসের ব্যাটারি দ্রুত শেষ করে দিতে পারে।
যদি আপনার অ্যাপটি ডিভাইসটিকে অতিরিক্ত পরিমাণে জাগিয়ে তোলে, তাহলে সমস্যাটি নির্ণয় ও সমাধান করার জন্য আপনি এই পৃষ্ঠার নির্দেশিকা ব্যবহার করতে পারেন।
সমস্যাটি সমাধান করুন
অ্যান্ড্রয়েড প্ল্যাটফর্মের প্রথম দিকের সংস্করণগুলিতে AlarmManager চালু করা হয়েছিল, কিন্তু সময়ের সাথে সাথে, পূর্বে যেসব ক্ষেত্রে AlarmManager প্রয়োজন হতো, সেগুলোর জন্য এখন ওয়ার্কম্যানেজারের মতো নতুন ফিচারগুলো আরও ভালোভাবে কাজ করে। এই বিভাগে ওয়েক-আপ অ্যালার্ম কমানোর জন্য কিছু টিপস রয়েছে, তবে দীর্ঘমেয়াদে, সেরা অনুশীলন (best practices) বিভাগে দেওয়া সুপারিশগুলো অনুসরণ করার জন্য আপনার অ্যাপটিকে মাইগ্রেট করার কথা বিবেচনা করুন।
আপনার অ্যাপের সেই জায়গাগুলো চিহ্নিত করুন যেখানে আপনি ঘুম থেকে ওঠার অ্যালার্ম নির্ধারণ করেন এবং সেই অ্যালার্মগুলো বেজে ওঠার হার কমিয়ে দিন। এখানে কিছু পরামর্শ দেওয়া হলো:
AlarmManagerএর বিভিন্নset()মেথডের সেইসব কলগুলো খুঁজুন যেগুলোতেRTC_WAKEUPঅথবাELAPSED_REALTIME_WAKEUPফ্ল্যাগ অন্তর্ভুক্ত আছে।আমরা সুপারিশ করি যে আপনি আপনার অ্যালার্মের ট্যাগ নামে আপনার প্যাকেজ, ক্লাস বা মেথডের নাম অন্তর্ভুক্ত করুন, যাতে আপনি আপনার সোর্সের মধ্যে অ্যালার্মটি কোথায় সেট করা হয়েছে তা সহজেই শনাক্ত করতে পারেন। এখানে কিছু অতিরিক্ত টিপস দেওয়া হলো:
- নামে কোনো ব্যক্তিগত শনাক্তকারী তথ্য (PII), যেমন ইমেল ঠিকানা, বাদ দিন। অন্যথায়, ডিভাইসটি অ্যালার্মের নামের পরিবর্তে
_UNKNOWNলগ করে। - প্রোগ্রাম্যাটিকভাবে ক্লাস বা মেথডের নাম নেবেন না, যেমন
getName()কল করে, কারণ এটি Proguard দ্বারা অস্পষ্ট হয়ে যেতে পারে। এর পরিবর্তে একটি হার্ড-কোডেড স্ট্রিং ব্যবহার করুন। - অ্যালার্ম ট্যাগে কোনো কাউন্টার বা অনন্য শনাক্তকারী যোগ করবেন না। এভাবে সেট করা অ্যালার্মগুলোকে সিস্টেম একত্রিত করতে পারবে না, কারণ সেগুলোর সবকটিতেই অনন্য শনাক্তকারী থাকে।
- নামে কোনো ব্যক্তিগত শনাক্তকারী তথ্য (PII), যেমন ইমেল ঠিকানা, বাদ দিন। অন্যথায়, ডিভাইসটি অ্যালার্মের নামের পরিবর্তে
সমস্যাটি সমাধান করার পর, নিম্নলিখিত ADB কমান্ডটি চালিয়ে যাচাই করুন যে আপনার ওয়েকআপ অ্যালার্মগুলি প্রত্যাশিতভাবে কাজ করছে কিনা:
adb shell dumpsys alarm
এই কমান্ডটি ডিভাইসে অ্যালার্ম সিস্টেম সার্ভিসের অবস্থা সম্পর্কে তথ্য প্রদান করে। আরও তথ্যের জন্য, dumpsys দেখুন।
সর্বোত্তম অনুশীলন
আপনার অ্যাপকে যদি ব্যবহারকারীর সামনে কোনো কাজ (যেমন নোটিফিকেশন পোস্ট করা বা ব্যবহারকারীকে সতর্ক করা) করার প্রয়োজন হয়, শুধুমাত্র তখনই ওয়েকআপ অ্যালার্ম ব্যবহার করুন। AlarmManager-এর সেরা অনুশীলনগুলোর তালিকার জন্য, ‘Scheduling Alarms’ দেখুন।
ব্যাকগ্রাউন্ড টাস্ক, বিশেষ করে পুনরাবৃত্তিমূলক বা নেটওয়ার্ক ব্যাকগ্রাউন্ড টাস্ক শিডিউল করার জন্য AlarmManager ব্যবহার করবেন না। ব্যাকগ্রাউন্ড টাস্ক শিডিউল করার জন্য WorkManager ব্যবহার করুন, কারণ এটি নিম্নলিখিত সুবিধাগুলো প্রদান করে:
- ব্যাচিং - কাজগুলো একত্রিত করা হয় যাতে ব্যাটারির ব্যবহার কমে যায়।
- স্থায়িত্ব - ডিভাইসটি রিবুট করা হলে, নির্ধারিত WorkManager জবগুলো রিবুট শেষ হওয়ার পরেও চলতে থাকে।
- শর্তাবলী - কাজগুলো বিভিন্ন শর্তের উপর ভিত্তি করে চলতে পারে, যেমন ডিভাইসটি চার্জ হচ্ছে কিনা বা ওয়াইফাই উপলব্ধ আছে কিনা।
আরও তথ্যের জন্য, ব্যাকগ্রাউন্ড প্রসেসিং নির্দেশিকা দেখুন।
এমন টাইমিং অপারেশন শিডিউল করতে AlarmManager ব্যবহার করবেন না যা শুধুমাত্র অ্যাপটি চালু থাকা অবস্থায় কার্যকর থাকে (অন্য কথায়, ব্যবহারকারী অ্যাপ থেকে বেরিয়ে গেলে টাইমিং অপারেশনটি বাতিল হয়ে যাওয়া উচিত)। এই ধরনের পরিস্থিতিতে Handler ক্লাস ব্যবহার করুন, কারণ এটি ব্যবহার করা সহজ এবং অনেক বেশি কার্যকর।
আপনার জন্য প্রস্তাবিত
- দ্রষ্টব্য: জাভাস্ক্রিপ্ট বন্ধ থাকলেও লিঙ্কের লেখা প্রদর্শিত হয়।
- আটকে থাকা আংশিক ওয়েক লক
- এএনআর
ওয়েকআপ হলো AlarmManager API-এর একটি প্রক্রিয়া, যা ডেভেলপারদের একটি নির্দিষ্ট সময়ে ডিভাইসকে জাগিয়ে তোলার জন্য অ্যালার্ম সেট করতে দেয়। আপনার অ্যাপ AlarmManager এর set() মেথডগুলোর যেকোনো একটিকে RTC_WAKEUP অথবা ELAPSED_REALTIME_WAKEUP ফ্ল্যাগসহ কল করার মাধ্যমে একটি ওয়েকআপ অ্যালার্ম সেট করে। যখন একটি ওয়েকআপ অ্যালার্ম ট্রিগার হয়, তখন ডিভাইসটি লো-পাওয়ার মোড থেকে বেরিয়ে আসে এবং অ্যালার্মের onReceive() বা onAlarm() মেথডটি এক্সিকিউট করার সময় একটি পার্শিয়াল ওয়েক লক ধরে রাখে। যদি ওয়েকআপ অ্যালার্ম অতিরিক্ত পরিমাণে ট্রিগার হয়, তবে তা ডিভাইসের ব্যাটারি দ্রুত শেষ করে দিতে পারে।
যদি আপনার অ্যাপটি ডিভাইসটিকে অতিরিক্ত পরিমাণে জাগিয়ে তোলে, তাহলে সমস্যাটি নির্ণয় ও সমাধান করার জন্য আপনি এই পৃষ্ঠার নির্দেশিকা ব্যবহার করতে পারেন।
সমস্যাটি সমাধান করুন
অ্যান্ড্রয়েড প্ল্যাটফর্মের প্রথম দিকের সংস্করণগুলিতে AlarmManager চালু করা হয়েছিল, কিন্তু সময়ের সাথে সাথে, পূর্বে যেসব ক্ষেত্রে AlarmManager প্রয়োজন হতো, সেগুলোর জন্য এখন ওয়ার্কম্যানেজারের মতো নতুন ফিচারগুলো আরও ভালোভাবে কাজ করে। এই বিভাগে ওয়েক-আপ অ্যালার্ম কমানোর জন্য কিছু টিপস রয়েছে, তবে দীর্ঘমেয়াদে, সেরা অনুশীলন (best practices) বিভাগে দেওয়া সুপারিশগুলো অনুসরণ করার জন্য আপনার অ্যাপটিকে মাইগ্রেট করার কথা বিবেচনা করুন।
আপনার অ্যাপের সেই জায়গাগুলো চিহ্নিত করুন যেখানে আপনি ঘুম থেকে ওঠার অ্যালার্ম নির্ধারণ করেন এবং সেই অ্যালার্মগুলো বেজে ওঠার হার কমিয়ে দিন। এখানে কিছু পরামর্শ দেওয়া হলো:
AlarmManagerএর বিভিন্নset()মেথডের সেইসব কলগুলো খুঁজুন যেগুলোতেRTC_WAKEUPঅথবাELAPSED_REALTIME_WAKEUPফ্ল্যাগ অন্তর্ভুক্ত আছে।আমরা সুপারিশ করি যে আপনি আপনার অ্যালার্মের ট্যাগ নামে আপনার প্যাকেজ, ক্লাস বা মেথডের নাম অন্তর্ভুক্ত করুন, যাতে আপনি আপনার সোর্সের মধ্যে অ্যালার্মটি কোথায় সেট করা হয়েছে তা সহজেই শনাক্ত করতে পারেন। এখানে কিছু অতিরিক্ত টিপস দেওয়া হলো:
- নামে কোনো ব্যক্তিগত শনাক্তকারী তথ্য (PII), যেমন ইমেল ঠিকানা, বাদ দিন। অন্যথায়, ডিভাইসটি অ্যালার্মের নামের পরিবর্তে
_UNKNOWNলগ করে। - প্রোগ্রাম্যাটিকভাবে ক্লাস বা মেথডের নাম নেবেন না, যেমন
getName()কল করে, কারণ এটি Proguard দ্বারা অস্পষ্ট হয়ে যেতে পারে। এর পরিবর্তে একটি হার্ড-কোডেড স্ট্রিং ব্যবহার করুন। - অ্যালার্ম ট্যাগে কোনো কাউন্টার বা অনন্য শনাক্তকারী যোগ করবেন না। এভাবে সেট করা অ্যালার্মগুলোকে সিস্টেম একত্রিত করতে পারবে না, কারণ সেগুলোর সবকটিতেই অনন্য শনাক্তকারী থাকে।
- নামে কোনো ব্যক্তিগত শনাক্তকারী তথ্য (PII), যেমন ইমেল ঠিকানা, বাদ দিন। অন্যথায়, ডিভাইসটি অ্যালার্মের নামের পরিবর্তে
সমস্যাটি সমাধান করার পর, নিম্নলিখিত ADB কমান্ডটি চালিয়ে যাচাই করুন যে আপনার ওয়েকআপ অ্যালার্মগুলি প্রত্যাশিতভাবে কাজ করছে কিনা:
adb shell dumpsys alarm
এই কমান্ডটি ডিভাইসে অ্যালার্ম সিস্টেম সার্ভিসের অবস্থা সম্পর্কে তথ্য প্রদান করে। আরও তথ্যের জন্য, dumpsys দেখুন।
সর্বোত্তম অনুশীলন
আপনার অ্যাপকে যদি ব্যবহারকারীর সামনে কোনো কাজ (যেমন নোটিফিকেশন পোস্ট করা বা ব্যবহারকারীকে সতর্ক করা) করার প্রয়োজন হয়, শুধুমাত্র তখনই ওয়েকআপ অ্যালার্ম ব্যবহার করুন। AlarmManager-এর সেরা অনুশীলনগুলোর তালিকার জন্য, ‘Scheduling Alarms’ দেখুন।
ব্যাকগ্রাউন্ড টাস্ক, বিশেষ করে পুনরাবৃত্তিমূলক বা নেটওয়ার্ক ব্যাকগ্রাউন্ড টাস্ক শিডিউল করার জন্য AlarmManager ব্যবহার করবেন না। ব্যাকগ্রাউন্ড টাস্ক শিডিউল করার জন্য WorkManager ব্যবহার করুন, কারণ এটি নিম্নলিখিত সুবিধাগুলো প্রদান করে:
- ব্যাচিং - কাজগুলো একত্রিত করা হয় যাতে ব্যাটারির ব্যবহার কমে যায়।
- স্থায়িত্ব - ডিভাইসটি রিবুট করা হলে, নির্ধারিত WorkManager জবগুলো রিবুট শেষ হওয়ার পরেও চলতে থাকে।
- শর্তাবলী - কাজগুলো বিভিন্ন শর্তের উপর ভিত্তি করে চলতে পারে, যেমন ডিভাইসটি চার্জ হচ্ছে কিনা বা ওয়াইফাই উপলব্ধ আছে কিনা।
আরও তথ্যের জন্য, ব্যাকগ্রাউন্ড প্রসেসিং নির্দেশিকা দেখুন।
এমন টাইমিং অপারেশন শিডিউল করতে AlarmManager ব্যবহার করবেন না যা শুধুমাত্র অ্যাপটি চালু থাকা অবস্থায় কার্যকর থাকে (অন্য কথায়, ব্যবহারকারী অ্যাপ থেকে বেরিয়ে গেলে টাইমিং অপারেশনটি বাতিল হয়ে যাওয়া উচিত)। এই ধরনের পরিস্থিতিতে Handler ক্লাস ব্যবহার করুন, কারণ এটি ব্যবহার করা সহজ এবং অনেক বেশি কার্যকর।
আপনার জন্য প্রস্তাবিত
- দ্রষ্টব্য: জাভাস্ক্রিপ্ট বন্ধ থাকলেও লিঙ্কের লেখা প্রদর্শিত হয়।
- আটকে থাকা আংশিক ওয়েক লক
- এএনআর
ওয়েকআপ হলো AlarmManager API-এর একটি প্রক্রিয়া, যা ডেভেলপারদের একটি নির্দিষ্ট সময়ে ডিভাইসকে জাগিয়ে তোলার জন্য অ্যালার্ম সেট করতে দেয়। আপনার অ্যাপ AlarmManager এর set() মেথডগুলোর যেকোনো একটিকে RTC_WAKEUP অথবা ELAPSED_REALTIME_WAKEUP ফ্ল্যাগসহ কল করার মাধ্যমে একটি ওয়েকআপ অ্যালার্ম সেট করে। যখন একটি ওয়েকআপ অ্যালার্ম ট্রিগার হয়, তখন ডিভাইসটি লো-পাওয়ার মোড থেকে বেরিয়ে আসে এবং অ্যালার্মের onReceive() বা onAlarm() মেথডটি এক্সিকিউট করার সময় একটি পার্শিয়াল ওয়েক লক ধরে রাখে। যদি ওয়েকআপ অ্যালার্ম অতিরিক্ত পরিমাণে ট্রিগার হয়, তবে তা ডিভাইসের ব্যাটারি দ্রুত শেষ করে দিতে পারে।
যদি আপনার অ্যাপটি ডিভাইসটিকে অতিরিক্ত পরিমাণে জাগিয়ে তোলে, তাহলে সমস্যাটি নির্ণয় ও সমাধান করার জন্য আপনি এই পৃষ্ঠার নির্দেশিকা ব্যবহার করতে পারেন।
সমস্যাটি সমাধান করুন
অ্যান্ড্রয়েড প্ল্যাটফর্মের প্রথম দিকের সংস্করণগুলিতে AlarmManager চালু করা হয়েছিল, কিন্তু সময়ের সাথে সাথে, পূর্বে যেসব ক্ষেত্রে AlarmManager প্রয়োজন হতো, সেগুলোর জন্য এখন ওয়ার্কম্যানেজারের মতো নতুন ফিচারগুলো আরও ভালোভাবে কাজ করে। এই বিভাগে ওয়েক-আপ অ্যালার্ম কমানোর জন্য কিছু টিপস রয়েছে, তবে দীর্ঘমেয়াদে, সেরা অনুশীলন (best practices) বিভাগে দেওয়া সুপারিশগুলো অনুসরণ করার জন্য আপনার অ্যাপটিকে মাইগ্রেট করার কথা বিবেচনা করুন।
আপনার অ্যাপের সেই জায়গাগুলো চিহ্নিত করুন যেখানে আপনি ঘুম থেকে ওঠার অ্যালার্ম নির্ধারণ করেন এবং সেই অ্যালার্মগুলো বেজে ওঠার হার কমিয়ে দিন। এখানে কিছু পরামর্শ দেওয়া হলো:
AlarmManagerএর বিভিন্নset()মেথডের সেইসব কলগুলো খুঁজুন যেগুলোতেRTC_WAKEUPঅথবাELAPSED_REALTIME_WAKEUPফ্ল্যাগ অন্তর্ভুক্ত আছে।আমরা সুপারিশ করি যে আপনি আপনার অ্যালার্মের ট্যাগ নামে আপনার প্যাকেজ, ক্লাস বা মেথডের নাম অন্তর্ভুক্ত করুন, যাতে আপনি আপনার সোর্সের মধ্যে অ্যালার্মটি কোথায় সেট করা হয়েছে তা সহজেই শনাক্ত করতে পারেন। এখানে কিছু অতিরিক্ত টিপস দেওয়া হলো:
- নামে কোনো ব্যক্তিগত শনাক্তকারী তথ্য (PII), যেমন ইমেল ঠিকানা, বাদ দিন। অন্যথায়, ডিভাইসটি অ্যালার্মের নামের পরিবর্তে
_UNKNOWNলগ করে। - প্রোগ্রাম্যাটিকভাবে ক্লাস বা মেথডের নাম নেবেন না, যেমন
getName()কল করে, কারণ এটি Proguard দ্বারা অস্পষ্ট হয়ে যেতে পারে। এর পরিবর্তে একটি হার্ড-কোডেড স্ট্রিং ব্যবহার করুন। - অ্যালার্ম ট্যাগে কোনো কাউন্টার বা অনন্য শনাক্তকারী যোগ করবেন না। এভাবে সেট করা অ্যালার্মগুলোকে সিস্টেম একত্রিত করতে পারবে না, কারণ সেগুলোর সবকটিতেই অনন্য শনাক্তকারী থাকে।
- নামে কোনো ব্যক্তিগত শনাক্তকারী তথ্য (PII), যেমন ইমেল ঠিকানা, বাদ দিন। অন্যথায়, ডিভাইসটি অ্যালার্মের নামের পরিবর্তে
সমস্যাটি সমাধান করার পর, নিম্নলিখিত ADB কমান্ডটি চালিয়ে যাচাই করুন যে আপনার ওয়েকআপ অ্যালার্মগুলি প্রত্যাশিতভাবে কাজ করছে কিনা:
adb shell dumpsys alarm
এই কমান্ডটি ডিভাইসে অ্যালার্ম সিস্টেম সার্ভিসের অবস্থা সম্পর্কে তথ্য প্রদান করে। আরও তথ্যের জন্য, dumpsys দেখুন।
সর্বোত্তম অনুশীলন
আপনার অ্যাপকে যদি ব্যবহারকারীর সামনে কোনো কাজ (যেমন নোটিফিকেশন পোস্ট করা বা ব্যবহারকারীকে সতর্ক করা) করার প্রয়োজন হয়, শুধুমাত্র তখনই ওয়েকআপ অ্যালার্ম ব্যবহার করুন। AlarmManager-এর সেরা অনুশীলনগুলোর তালিকার জন্য, ‘Scheduling Alarms’ দেখুন।
ব্যাকগ্রাউন্ড টাস্ক, বিশেষ করে পুনরাবৃত্তিমূলক বা নেটওয়ার্ক ব্যাকগ্রাউন্ড টাস্ক শিডিউল করার জন্য AlarmManager ব্যবহার করবেন না। ব্যাকগ্রাউন্ড টাস্ক শিডিউল করার জন্য WorkManager ব্যবহার করুন, কারণ এটি নিম্নলিখিত সুবিধাগুলো প্রদান করে:
- ব্যাচিং - কাজগুলো একত্রিত করা হয় যাতে ব্যাটারির ব্যবহার কমে যায়।
- স্থায়িত্ব - ডিভাইসটি রিবুট করা হলে, নির্ধারিত WorkManager জবগুলো রিবুট শেষ হওয়ার পরেও চলতে থাকে।
- শর্তাবলী - কাজগুলো বিভিন্ন শর্তের উপর ভিত্তি করে চলতে পারে, যেমন ডিভাইসটি চার্জ হচ্ছে কিনা বা ওয়াইফাই উপলব্ধ আছে কিনা।
আরও তথ্যের জন্য, ব্যাকগ্রাউন্ড প্রসেসিং নির্দেশিকা দেখুন।
এমন টাইমিং অপারেশন শিডিউল করতে AlarmManager ব্যবহার করবেন না যা শুধুমাত্র অ্যাপটি চালু থাকা অবস্থায় কার্যকর থাকে (অন্য কথায়, ব্যবহারকারী অ্যাপ থেকে বেরিয়ে গেলে টাইমিং অপারেশনটি বাতিল হয়ে যাওয়া উচিত)। এই ধরনের পরিস্থিতিতে Handler ক্লাস ব্যবহার করুন, কারণ এটি ব্যবহার করা সহজ এবং অনেক বেশি কার্যকর।
আপনার জন্য প্রস্তাবিত
- দ্রষ্টব্য: জাভাস্ক্রিপ্ট বন্ধ থাকলেও লিঙ্কের লেখা প্রদর্শিত হয়।
- আটকে থাকা আংশিক ওয়েক লক
- এএনআর