যদি আপনার অ্যাপটি Android 11 (API লেভেল 30) বা তার বেশি ভার্সনের জন্য তৈরি হয় এবং ব্যবহারকারী কয়েক মাস ধরে আপনার অ্যাপের সাথে ইন্টারঅ্যাক্ট না করে, তাহলে সিস্টেমটি আপনার অ্যাপটিকে হাইবারনেশন অবস্থায় রাখে। সিস্টেমটি পারফরম্যান্সের পরিবর্তে স্টোরেজ স্পেসের জন্য অপ্টিমাইজ করে এবং সিস্টেমটি ব্যবহারকারীর ডেটা সুরক্ষিত রাখে। এই সিস্টেমের আচরণটি ব্যবহারকারী যখন আপনার অ্যাপটিকে সিস্টেম সেটিংস থেকে ম্যানুয়ালি জোর করে বন্ধ করে দেয় তখন যা ঘটে তার অনুরূপ।
শীতনিদ্রার প্রভাব
সারণি ১-এ দেখানো হয়েছে, হাইবারনেশনের প্রভাব আপনার অ্যাপের টার্গেট SDK সংস্করণের উপর নির্ভর করে, সেইসাথে আপনার অ্যাপটি কোন ডিভাইসে চলছে তার উপরও নির্ভর করে:
| টার্গেট SDK সংস্করণ | ডিভাইসের বৈশিষ্ট্য | শীতনিদ্রার প্রভাব |
|---|---|---|
| অ্যান্ড্রয়েড ১২ বা তার উচ্চতর | অ্যান্ড্রয়েড ১২ বা তার পরবর্তী ভার্সনে চলে | আপনার অ্যাপের রানটাইম অনুমতিগুলি রিসেট করা হয়েছে। এই ক্রিয়াটি একই প্রভাব ফেলে যেমন ব্যবহারকারী সিস্টেম সেটিংসে কোনও অনুমতি দেখেছেন এবং আপনার অ্যাপের অ্যাক্সেস লেভেলকে Deny এ পরিবর্তন করেছেন। আপনার অ্যাপটি ব্যাকগ্রাউন্ড থেকে কাজ বা সতর্কতা চালাতে পারে না। আপনার অ্যাপটি পুশ বিজ্ঞপ্তিগুলি গ্রহণ করতে পারে না, যার মধ্যে ফায়ারবেস ক্লাউড মেসেজিংয়ের মাধ্যমে প্রেরিত উচ্চ-অগ্রাধিকার বার্তাগুলিও অন্তর্ভুক্ত। আপনার অ্যাপের ক্যাশে থাকা যেকোনো ফাইল মুছে ফেলা হবে। |
| অ্যান্ড্রয়েড ১১ | অ্যান্ড্রয়েড ১১ চালায় | আপনার অ্যাপের রানটাইম অনুমতিগুলি রিসেট করা হয়েছে। |
| অ্যান্ড্রয়েড ১১ | অ্যান্ড্রয়েড ৬.০ (এপিআই লেভেল ২৩) থেকে অ্যান্ড্রয়েড ১০ (এপিআই লেভেল ২৯) পর্যন্ত চলে, এবং গুগল প্লে পরিষেবা দ্বারা চালিত। | আপনার অ্যাপের রানটাইম অনুমতিগুলি রিসেট করা হয়েছে। এই আচরণটি ২০২১ সালের ডিসেম্বরে কার্যকর হবে । আরও কোটি কোটি ডিভাইসে অনুমতি স্বয়ংক্রিয়ভাবে রিসেট করার সুবিধা উপলব্ধ করার বিষয়ে এই ব্লগ পোস্টে আরও জানুন। |
যখন কোনও অ্যাপ হাইবারনেশন থেকে বেরিয়ে আসে তখন সিস্টেমের আচরণ
যখন ব্যবহারকারী পরবর্তীতে আপনার অ্যাপের সাথে ইন্টারঅ্যাক্ট করে, তখন আপনার অ্যাপটি হাইবারনেশন থেকে বেরিয়ে আসে এবং এটি আবার কাজ, সতর্কতা এবং বিজ্ঞপ্তি তৈরি করতে পারে।
তবে, সিস্টেমটি আপনার অ্যাপের জন্য নিম্নলিখিত কাজগুলি করে না:
আপনার অ্যাপের রানটাইম অনুমতি পুনরায় প্রদান করুন।
ব্যবহারকারীকে আপনার অ্যাপের জন্য এই অনুমতিগুলি পুনরায় প্রদান করতে হবে।
আপনার অ্যাপটি হাইবারনেশনে যাওয়ার আগে নির্ধারিত যেকোনো কাজ, সতর্কতা এবং বিজ্ঞপ্তি পুনরায় নির্ধারণ করুন।
এই ওয়ার্কফ্লোটিকে আরও সহজে সমর্থন করার জন্য, WorkManager ব্যবহার করুন। আপনি
ACTION_BOOT_COMPLETEDব্রডকাস্ট রিসিভারে পুনঃনির্ধারণ লজিকও যোগ করতে পারেন, যা আপনার অ্যাপটি হাইবারনেশন থেকে বেরিয়ে আসার পরে এবং ডিভাইসটি বুট হওয়ার পরে চালু হয়।
অ্যাপ ব্যবহার
নিম্নলিখিত বিভাগগুলিতে অ্যাপ ব্যবহারের উদাহরণ দেওয়া হয়েছে, সেইসাথে সিস্টেম যেসব ক্রিয়াকে অ্যাপ ব্যবহার বলে মনে করে না তার উদাহরণ দেওয়া হয়েছে।
অ্যাপ ব্যবহারের উদাহরণ
যখন আপনার অ্যাপের কোনও কার্যকলাপ পুনরায় শুরু করা হয়, তখন সিস্টেমটি এই ঘটনাটিকে ব্যবহারকারীর মিথস্ক্রিয়া হিসাবে বিবেচনা করে। অতএব, সিস্টেমটি আপনার অ্যাপটি হাইবারনেশনে প্রবেশ করার আগে সময় বাড়ায়।
অ্যান্ড্রয়েড ১১ এবং তার পরবর্তী সংস্করণে, নিম্নলিখিত আচরণগুলিকে ব্যবহারকারীর ইন্টারঅ্যাকশন হিসাবে বিবেচনা করা হয়:
- ব্যবহারকারী একটি উইজেটের সাথে ইন্টারঅ্যাক্ট করে।
ব্যবহারকারী একটি বিজ্ঞপ্তির সাথে ইন্টারঅ্যাক্ট করে, বিজ্ঞপ্তিটি খারিজ করা ছাড়া।
এটা মনে রাখা উচিত যে হাইবারনেশনের জন্য অ্যাপ ব্যবহারের জন্য স্পষ্টভাবে ব্যবহারকারীর ইন্টারঅ্যাকশনের প্রয়োজন হয় না। যতক্ষণ প্যাকেজের একটি উপাদান ব্যবহার করা হয়, ততক্ষণ এটি অ্যাপ ব্যবহার হিসাবে বিবেচিত হয়। এর কিছু উদাহরণের মধ্যে রয়েছে:
- যেসব অ্যাপের ডিভাইস বা অপারেটিং সিস্টেমে অন্য অ্যাপের সাথে একটি পরিষেবা বা কন্টেন্ট প্রদানকারী আবদ্ধ থাকে। উদাহরণস্বরূপ, ইনপুট মেথড এডিটর (IME) বা পাসওয়ার্ড ম্যানেজার।
প্যাকেজে থাকা ব্রডকাস্ট রিসিভারগুলি একটি বহিরাগত প্যাকেজ থেকে একটি স্পষ্ট সম্প্রচার গ্রহণ করে।
অ-উদাহরণ
যদি আপনার অ্যাপটি শুধুমাত্র নিম্নলিখিত তালিকায় বর্ণিত আচরণগুলি প্রদর্শন করে, তাহলে কয়েক মাস পরে আপনার অ্যাপটি হাইবারনেশনে চলে যায়:
-
JobSchedulerব্যবহার করে একটি নির্ধারিত কাজ চালায়। - একটি অন্তর্নিহিত সম্প্রচার গ্রহণ করে।
- অ্যালার্মের সময়সূচী ।
শীতনিদ্রা থেকে সিস্টেমের অব্যাহতি
কিছু নির্দিষ্ট ব্যবহারের ক্ষেত্রে অ্যান্ড্রয়েড সিস্টেম-স্তরের অ্যাপ হাইবারনেশন থেকে অব্যাহতি দেয়। যদি আপনার অ্যাপটি নিম্নলিখিত বিভাগগুলির মধ্যে একটিতে পড়ে, তবে এটি অ্যাপ ব্যবহারের মান থেকে অব্যাহতিপ্রাপ্ত এবং হাইবারনেশন করবে না।
- লঞ্চারে অ্যাপগুলি প্রদর্শিত হচ্ছে না
- যে কোনও অ্যাপ যার লঞ্চারে একটি সক্রিয় শর্টকাট টাইল নেই।
- কর্মক্ষেত্রের প্রোফাইল অ্যাপ
- কোনও ব্যবহারকারী তার কর্মক্ষেত্রের প্রোফাইলে ইনস্টল করা যেকোনো অ্যাপ। মনে রাখবেন যে যদি একই অ্যাপটি ব্যক্তিগত প্রোফাইলেও থাকে, তাহলে শুধুমাত্র কর্মক্ষেত্রের প্রোফাইল অ্যাপটিই এর আওতামুক্ত।
- ডিভাইস নীতি নিয়ন্ত্রক
- ডিভাইসে স্থানীয় ডিভাইস নীতি এবং সিস্টেম অ্যাপ্লিকেশন নিয়ন্ত্রণ করে এমন অ্যাপ।
- ক্যারিয়ারের সুবিধাপ্রাপ্ত অ্যাপস
- যেকোনো অ্যাপ যা মোবাইল ফোন অপারেটররা ডিভাইসে প্রি-লোড করে এবং চুক্তিভিত্তিক পরিষেবার বাধ্যবাধকতার জন্য প্রয়োজনীয় বলে মনে করে, উদাহরণস্বরূপ, ভয়েসমেইল বা গ্রাহক পরিষেবা অ্যাপ।
- 3p ইনস্টলার অ্যাপস
- প্রয়োজনে থার্ড-পার্টি অ্যাপ তাদের ইনস্টল করা অ্যাপের স্বয়ংক্রিয় আপডেটের জন্য সংরক্ষণ করে।
ব্যবহারকারীদের শীতনিদ্রা থেকে অব্যাহতি
যদি আপনি অনুমান করেন যে আপনার অ্যাপের কোনও মূল ব্যবহারের ক্ষেত্রে হাইবারনেশনের প্রভাব পড়েছে, তাহলে আপনি ব্যবহারকারীর কাছ থেকে অ্যাপ হাইবারনেশন থেকে অব্যাহতির অনুরোধ করতে পারেন। এই অব্যাহতি সেই পরিস্থিতিতে কার্যকর যেখানে ব্যবহারকারী আশা করেন যে আপনার অ্যাপটি মূলত ব্যাকগ্রাউন্ডে কাজ করবে, এমনকি ব্যবহারকারী আপনার অ্যাপের সাথে ইন্টারঅ্যাক্ট না করেও, যেমন যখন আপনার অ্যাপ নিম্নলিখিতগুলির মধ্যে কোনও একটি করে:
- পরিবারের সদস্যদের অবস্থান পর্যায়ক্রমে রিপোর্ট করে পরিবারের নিরাপত্তা নিশ্চিত করুন।
- একটি ডিভাইস এবং আপনার অ্যাপের সার্ভারের মধ্যে ডেটা সিঙ্ক করুন।
- টিভির মতো স্মার্ট ডিভাইসের মাধ্যমে যোগাযোগ করুন।
- ঘড়ির মতো সহচর ডিভাইসের সাথে পেয়ার করুন।
অব্যাহতির অনুরোধ করতে, নিম্নলিখিত বিভাগগুলির ধাপগুলি সম্পূর্ণ করুন।
ব্যবহারকারী ইতিমধ্যেই আপনার অ্যাপের জন্য হাইবারনেশন অক্ষম করেছেন কিনা তা পরীক্ষা করুন।
ব্যবহারকারী ইতিমধ্যেই আপনার অ্যাপের জন্য হাইবারনেশন অক্ষম করেছেন কিনা তা পরীক্ষা করতে, getUnusedAppRestrictionsStatus() API ব্যবহার করুন।
আপনার অ্যাপে এই API কীভাবে ব্যবহার করবেন সে সম্পর্কে আরও তথ্যের জন্য, এই পৃষ্ঠায় API কোডের উদাহরণটি দেখুন।
ব্যবহারকারীকে আপনার অ্যাপের জন্য হাইবারনেশন অক্ষম করতে বলুন।
যদি ব্যবহারকারী ইতিমধ্যেই আপনার অ্যাপের জন্য হাইবারনেশন অক্ষম না করে থাকেন, তাহলে আপনি ব্যবহারকারীকে একটি অনুরোধ পাঠাতে পারেন। এটি করার জন্য, এই পদক্ষেপগুলি সম্পূর্ণ করুন:
- এমন একটি UI প্রদর্শন করুন যা ব্যবহারকারীকে ব্যাখ্যা করে কেন তাদের আপনার অ্যাপের জন্য হাইবারনেশন অক্ষম করতে হবে।
API কোড উদাহরণে দেখানো
createManageUnusedAppRestrictionsIntent()API চালু করুন। এই API একটি ইনটেন্ট তৈরি করে যা সেটিংসে অ্যাপ তথ্য স্ক্রিন লোড করে। এখান থেকে, ব্যবহারকারী আপনার অ্যাপের জন্য হাইবারনেশন বন্ধ করতে পারবেন।এই ইন্টেন্টটি পাঠানোর সময়
startActivity()startActivityForResult()() কল করা গুরুত্বপূর্ণ।সারণি ২-এ দেখানো হয়েছে, বিকল্পটির অবস্থান এবং নাম আপনার অ্যাপটি যে ডিভাইসে ইনস্টল করা আছে তার বৈশিষ্ট্যের উপর নির্ভর করে:
সারণী ২। আপনার অ্যাপের জন্য হাইবারনেশন অক্ষম করার বিকল্প ডিভাইসের বৈশিষ্ট্য যে পৃষ্ঠায় বিকল্পটি প্রদর্শিত হবে বন্ধ করার বিকল্পের নাম অ্যান্ড্রয়েড ১৩ বা তার পরবর্তী ভার্সনে চলে অ্যাপের তথ্য ব্যবহার না করা থাকলে অ্যাপ অ্যাক্টিভিটি পজ করুন অ্যান্ড্রয়েড ১২ চালায় অ্যাপের তথ্য অনুমতিগুলি সরিয়ে দিন এবং জায়গা খালি করুন অ্যান্ড্রয়েড ১১ চালায় অ্যাপের তথ্য > অনুমতি অ্যাপ ব্যবহার না করলে অনুমতিগুলি সরিয়ে দিন অ্যান্ড্রয়েড ৬.০ থেকে অ্যান্ড্রয়েড ১০ পর্যন্ত চলে, এবং গুগল প্লে পরিষেবা দ্বারা চালিত। প্লে অ্যাপ > মেনু > প্লে প্রোটেক্ট > অব্যবহৃত অ্যাপের জন্য অনুমতি অ্যাপ ব্যবহার না করলে অনুমতিগুলি সরিয়ে দিন
API কোডের উদাহরণ
এই কোড উদাহরণটি দেখায় কিভাবে আপনার অ্যাপের জন্য হাইবারনেশন সক্রিয় আছে কিনা তা পরীক্ষা করবেন এবং ব্যবহারকারীদের আপনার অ্যাপের জন্য হাইবারনেশন অক্ষম করতে বলার সঠিক উপায়।
কোটলিন
val future: ListenableFuture<Int> = PackageManagerCompat.getUnusedAppRestrictionsStatus(context) future.addListener({ onResult(future.get()) }, ContextCompat.getMainExecutor(context)) fun onResult(appRestrictionsStatus: Int) { when (appRestrictionsStatus) { // Couldn't fetch status. Check logs for details. ERROR -> { } // Restrictions don't apply to your app on this device. FEATURE_NOT_AVAILABLE -> { } // The user has disabled restrictions for your app. DISABLED -> { } // If the user doesn't start your app for a few months, the system will // place restrictions on it. See the API_* constants for details. API_30_BACKPORT, API_30, API_31 -> handleRestrictions(appRestrictionsStatus) } } fun handleRestrictions(appRestrictionsStatus: Int) { // If your app works primarily in the background, you can ask the user // to disable these restrictions. Check if you have already asked the // user to disable these restrictions. If not, you can show a message to // the user explaining why permission auto-reset or app hibernation should be // disabled. Then, redirect the user to the page in system settings where they // can disable the feature. val intent = IntentCompat.createManageUnusedAppRestrictionsIntent(context, packageName) // You must use startActivityForResult(), not startActivity(), even if // you don't use the result code returned in onActivityResult(). startActivityForResult(intent, REQUEST_CODE) }
লিগ্যাসি প্ল্যাটফর্ম API
অপারেটিং সিস্টেমটিতে হাইবারনেশন বৈশিষ্ট্যের সাথে ইন্টারঅ্যাক্ট করার জন্য একটি APIও রয়েছে। তবে, API শুধুমাত্র Android 11 বা তার উচ্চতর সংস্করণে চালিত ডিভাইসগুলিতে কাজ করে; API পূর্ববর্তী Android সংস্করণগুলিতে ব্যাকপোর্ট করা হাইবারনেশন বৈশিষ্ট্যগুলি পরিচালনা করে না। অতএব, আমরা API ব্যবহার করার পরামর্শ দিচ্ছি না।
সামঞ্জস্যের উদ্দেশ্যে যদি আপনার অস্থায়ীভাবে API ব্যবহার চালিয়ে যেতে হয়, তাহলে নিম্নলিখিত তালিকাটি এটি কীভাবে ব্যবহার করবেন তা দেখায়:
- আপনার অ্যাপের জন্য হাইবারনেশন অক্ষম কিনা তা পরীক্ষা করতে:
isAutoRevokeWhitelisted() - ব্যবহারকারীকে হাইবারনেশন সেটিংস পৃষ্ঠায় পাঠাতে:
ACTION_APPLICATION_DETAILS_SETTINGSব্যবহার করে একটি Intent তৈরি করুন।
ম্যানুয়ালি হাইবারনেশন আচরণ শুরু করুন
সিস্টেম আপনার অ্যাপটিকে হাইবারনেশন অবস্থায় রাখার পর আপনার অ্যাপটি কেমন আচরণ করে তা পরীক্ষা করতে, নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করুন:
(শুধুমাত্র অ্যান্ড্রয়েড ১২ এবং উচ্চতর সংস্করণের জন্য) আপনার ডিভাইসে হাইবারনেশন আচরণ সক্ষম করুন:
adb shell device_config put app_hibernation app_hibernation_enabled true
সিস্টেমটি হাইবারনেশনে প্রবেশের জন্য অপেক্ষা করার ডিফল্ট সময় নির্ধারণ করুন। এইভাবে, আপনি পরীক্ষার পরে এটি পুনরুদ্ধার করতে পারেন:
threshold=$(adb shell device_config get permissions \ auto_revoke_unused_threshold_millis2)
সিস্টেমের অপেক্ষার সময় কমিয়ে দিন। নিম্নলিখিত উদাহরণে, সিস্টেমটি এমনভাবে পরিবর্তিত হয়েছে যে আপনি অ্যাপের সাথে ইন্টারঅ্যাক্ট করা বন্ধ করার মাত্র এক সেকেন্ড পরে আপনার অ্যাপটি হাইবারনেশনে চলে যায়:
adb shell device_config put permissions \ auto_revoke_unused_threshold_millis2 1000
নিম্নলিখিত কমান্ডটি চালিয়ে আপনার পরীক্ষামূলক ডিভাইসে যেকোনো বুট-টাইম সম্প্রচার শেষ হওয়ার জন্য অপেক্ষা করুন:
adb shell am wait-for-broadcast-idle
সম্প্রচার শেষ হলে, এই কমান্ডটি বার্তাটি ফেরত দেয়:
All broadcast queues are idle!অ্যাপ হাইবারনেশন প্রক্রিয়াটি ম্যানুয়ালি শুরু করুন:
adb shell cmd jobscheduler run -u 0 -f \ com.google.android.permissioncontroller 2
(শুধুমাত্র অ্যান্ড্রয়েড ১২ এবং উচ্চতর সংস্করণের জন্য) নিম্নলিখিত পদ্ধতিগুলির মধ্যে একটি ব্যবহার করে নিশ্চিত করুন যে অ্যাপটি হাইবারনেটেড আছে:
- লক্ষ্য করুন যে পরীক্ষামূলক ডিভাইসটি এখন একটি বিজ্ঞপ্তি দেখায়, যা নির্দেশ করে যে অব্যবহৃত অ্যাপগুলি হাইবারনেটেড।
নিম্নলিখিত কমান্ডটি চালান:
adb shell cmd app_hibernation get-state PACKAGE-NAME
আপনার অ্যাপটিকে হাইবারনেশনে রাখার আগে সিস্টেম যে ডিফল্ট সময় অপেক্ষা করে তা পুনরুদ্ধার করুন:
adb shell device_config put permissions \ auto_revoke_unused_threshold_millis2 $threshold