অ্যাপ হাইবারনেশন

যদি আপনার অ্যাপটি Android 11 (API লেভেল 30) বা উচ্চতরকে লক্ষ্য করে এবং ব্যবহারকারী আপনার অ্যাপের সাথে কয়েক মাস ইন্টারঅ্যাক্ট না করে, তাহলে সিস্টেমটি আপনার অ্যাপটিকে হাইবারনেশন অবস্থায় রাখে। সিস্টেমটি পারফরম্যান্সের পরিবর্তে স্টোরেজ স্পেসের জন্য অপ্টিমাইজ করে এবং সিস্টেম ব্যবহারকারীর ডেটা রক্ষা করে। এই সিস্টেমের আচরণ একই রকম যেটি ঘটে যখন ব্যবহারকারী ম্যানুয়ালি সিস্টেম সেটিংস থেকে আপনার অ্যাপটিকে জোর করে-স্টপ করে।

হাইবারনেশনের প্রভাব

সারণি 1 এ দেখানো হয়েছে, হাইবারনেশনের প্রভাবগুলি আপনার অ্যাপের টার্গেট SDK সংস্করণের পাশাপাশি আপনার অ্যাপটি যে ডিভাইসে চলছে তার উপর নির্ভর করে:

সারণী 1. আপনার অ্যাপে হাইবারনেশনের প্রভাব
টার্গেট SDK সংস্করণ ডিভাইসের বৈশিষ্ট্য হাইবারনেশন প্রভাব
Android 12 বা উচ্চতর Android 12 বা উচ্চতর সংস্করণ চালায়

আপনার অ্যাপের রানটাইম অনুমতি রিসেট করা হয়েছে। এই ক্রিয়াটির একই প্রভাব রয়েছে যদি ব্যবহারকারী সিস্টেম সেটিংসে একটি অনুমতি দেখেন এবং আপনার অ্যাপের অ্যাক্সেস স্তরকে অস্বীকারে পরিবর্তন করেন।

আপনার অ্যাপ ব্যাকগ্রাউন্ড থেকে চাকরি বা সতর্কতা চালাতে পারে না।

আপনার অ্যাপ ফায়ারবেস ক্লাউড মেসেজিংয়ের মাধ্যমে পাঠানো উচ্চ-অগ্রাধিকার বার্তা সহ পুশ বিজ্ঞপ্তিগুলি গ্রহণ করতে পারে না।

আপনার অ্যাপের ক্যাশে থাকা যেকোনো ফাইল মুছে ফেলা হয়।

অ্যান্ড্রয়েড 11 Android 11 চালায় আপনার অ্যাপের রানটাইম অনুমতি রিসেট করা হয়েছে।
অ্যান্ড্রয়েড 11 অ্যান্ড্রয়েড 6.0 (এপিআই লেভেল 23) থেকে অ্যান্ড্রয়েড 10 (এপিআই লেভেল 29) চালায়, সমন্বিত, এবং Google Play পরিষেবা দ্বারা চালিত হয়

আপনার অ্যাপের রানটাইম অনুমতি রিসেট করা হয়েছে।

এই আচরণটি ডিসেম্বর 2021 থেকে কার্যকর হবে ৷ আরও বিলিয়ন ডিভাইসে অনুমতিগুলি স্বয়ংক্রিয়-রিসেট উপলব্ধ করার বিষয়ে এই ব্লগ পোস্টে আরও জানুন৷

যখন একটি অ্যাপ হাইবারনেশন ছেড়ে যায় তখন সিস্টেমের আচরণ

যখন ব্যবহারকারী আপনার অ্যাপের সাথে পরবর্তী ইন্টারঅ্যাক্ট করে, তখন আপনার অ্যাপটি হাইবারনেশন থেকে বেরিয়ে যায় এবং এটি আবার চাকরি, সতর্কতা এবং বিজ্ঞপ্তি তৈরি করতে পারে।

যাইহোক, সিস্টেম আপনার অ্যাপের জন্য নিম্নলিখিত কাজ করে না:

  1. আপনার অ্যাপের রানটাইম অনুমতি পুনরায় মঞ্জুর করুন।

    ব্যবহারকারীকে অবশ্যই আপনার অ্যাপের জন্য এই অনুমতিগুলি পুনরায় প্রদান করতে হবে।

  2. আপনার অ্যাপ্লিকেশান হাইবারনেশনে যাওয়ার আগে নির্ধারিত যেকোন চাকরি, সতর্কতা এবং বিজ্ঞপ্তিগুলিকে পুনরায় শিডিউল করুন৷

    এই কর্মপ্রবাহকে আরও সহজে সমর্থন করতে, WorkManager ব্যবহার করুন। এছাড়াও আপনি ACTION_BOOT_COMPLETED ব্রডকাস্ট রিসিভারে রিশিডিউলিং লজিক যোগ করতে পারেন, যা আপনার অ্যাপ হাইবারনেশন ছেড়ে গেলে এবং ডিভাইস বুট আপ হওয়ার পরে চালু করা হয়।

অ্যাপ ব্যবহার

নিম্নলিখিত বিভাগগুলি অ্যাপ ব্যবহারের উদাহরণ প্রদান করে, সেইসাথে অ্যাকশনের উদাহরণ দেয় যা সিস্টেমটি অ্যাপ ব্যবহার হিসাবে বিবেচনা করে না।

অ্যাপ ব্যবহারের উদাহরণ

যখন আপনার অ্যাপে কোনো অ্যাক্টিভিটি আবার শুরু হয়, তখন সিস্টেম এই ইভেন্টটিকে ব্যবহারকারীর ইন্টারঅ্যাকশন হিসেবে বিবেচনা করে। অতএব, আপনার অ্যাপ হাইবারনেশনে প্রবেশ করার আগে সিস্টেমটি সময়ের পরিমাণ বাড়িয়ে দেয়।

অ্যান্ড্রয়েড 11 এবং উচ্চতর সংস্করণে, নিম্নলিখিত আচরণগুলি ব্যবহারকারীর মিথস্ক্রিয়া হিসাবে বিবেচিত হয়:

  • ব্যবহারকারী একটি উইজেটের সাথে যোগাযোগ করে।
  • ব্যবহারকারী একটি বিজ্ঞপ্তির সাথে যোগাযোগ করে, বিজ্ঞপ্তিটি খারিজ করা ছাড়া।

এটি লক্ষ করা উচিত যে হাইবারনেশনের জন্য অ্যাপ ব্যবহারের জন্য স্পষ্টভাবে ব্যবহারকারীর মিথস্ক্রিয়া প্রয়োজন হয় না। যতক্ষণ পর্যন্ত প্যাকেজের একটি উপাদান আহ্বান করা হয়, এটি এখনও অ্যাপ ব্যবহার হিসাবে বিবেচিত হয়। এর কিছু উদাহরণ অন্তর্ভুক্ত:

  • যে অ্যাপগুলির একটি পরিষেবা বা বিষয়বস্তু প্রদানকারী ডিভাইস বা OS-এ অন্য অ্যাপ দ্বারা আবদ্ধ। উদাহরণস্বরূপ, ইনপুট মেথড এডিটর (আইএমই) বা পাসওয়ার্ড ম্যানেজার।
  • একটি বহিরাগত প্যাকেজ থেকে একটি স্পষ্ট সম্প্রচার গ্রহণ প্যাকেজে ব্রডকাস্ট রিসিভার.

অ উদাহরণ

যদি আপনার অ্যাপ শুধুমাত্র নিম্নলিখিত তালিকায় বর্ণিত আচরণগুলি প্রদর্শন করে, আপনার অ্যাপ কয়েক মাস পরে হাইবারনেশনে প্রবেশ করে:

হাইবারনেশন থেকে সিস্টেম ছাড়

Android নির্দিষ্ট ব্যবহারের ক্ষেত্রে অ্যাপ হাইবারনেশন থেকে সিস্টেম-স্তরের ছাড় দেয়। যদি আপনার অ্যাপ নিম্নলিখিত বিভাগের মধ্যে পড়ে, তবে এটি অ্যাপ ব্যবহারের মান থেকে মুক্ত এবং হাইবারনেট হবে না।

অ্যাপ্লিকেশানগুলি লঞ্চারে প্রদর্শিত হয় না৷
লঞ্চারে সক্রিয় শর্টকাট টাইল নেই এমন যেকোনো অ্যাপ।
কাজের প্রোফাইল অ্যাপ
কাজের প্রোফাইলে ব্যবহারকারী যে কোনো অ্যাপ ইনস্টল করেন। মনে রাখবেন যে একই অ্যাপটি যদি ব্যক্তিগত প্রোফাইলেও থাকে তবে শুধুমাত্র কাজের প্রোফাইল অ্যাপটিই ছাড় পাবে।
ডিভাইস নীতি নিয়ন্ত্রক
ডিভাইসে স্থানীয় ডিভাইস নীতি এবং সিস্টেম অ্যাপ্লিকেশন নিয়ন্ত্রণ করে এমন অ্যাপ।
ক্যারিয়ারের সুবিধাপ্রাপ্ত অ্যাপ
যেকোন অ্যাপ যা মোবাইল ফোন বাহক ডিভাইসে প্রি-লোড করে এবং চুক্তিভিত্তিক পরিষেবার বাধ্যবাধকতার জন্য প্রয়োজনীয় বলে মনে করে, উদাহরণস্বরূপ, ভয়েসমেল বা গ্রাহক পরিষেবা অ্যাপ।
3p ইনস্টলার অ্যাপ
প্রয়োজনে তাদের ইনস্টল করা অ্যাপের স্বয়ংক্রিয় আপডেটের জন্য তৃতীয় পক্ষের অ্যাপ স্টোর করে।

হাইবারনেশন থেকে ব্যবহারকারীর ছাড়

আপনি যদি অনুমান করেন যে আপনার অ্যাপের একটি মূল ব্যবহারের ক্ষেত্রে হাইবারনেশন দ্বারা প্রভাবিত হয়েছে, আপনি ব্যবহারকারীর কাছ থেকে অ্যাপ হাইবারনেশন থেকে একটি ছাড়ের অনুরোধ করতে পারেন। এই ছাড়টি এমন পরিস্থিতিতে উপযোগী যেখানে ব্যবহারকারী আপনার অ্যাপটি প্রাথমিকভাবে ব্যাকগ্রাউন্ডে কাজ করবে বলে আশা করে, এমনকি ব্যবহারকারী আপনার অ্যাপের সাথে ইন্টারঅ্যাক্ট না করেও, যেমন যখন আপনার অ্যাপ নিম্নলিখিতগুলির যেকোনো একটি করে:

  • পর্যায়ক্রমে পরিবারের সদস্যদের অবস্থান রিপোর্ট করে পারিবারিক নিরাপত্তা প্রদান করুন।
  • একটি ডিভাইস এবং আপনার অ্যাপের সার্ভারের মধ্যে ডেটা সিঙ্ক করুন।
  • স্মার্ট ডিভাইসের সাথে যোগাযোগ করুন, যেমন একটি টিভি।
  • সহচর ডিভাইসের সাথে পেয়ার করুন, যেমন একটি ঘড়ি।

একটি ছাড়ের অনুরোধ করতে, নিম্নলিখিত বিভাগগুলিতে পদক্ষেপগুলি সম্পূর্ণ করুন৷

ব্যবহারকারী ইতিমধ্যে আপনার অ্যাপের জন্য হাইবারনেশন অক্ষম করেছেন কিনা তা পরীক্ষা করুন৷

ব্যবহারকারী আপনার অ্যাপের জন্য ইতিমধ্যে হাইবারনেশন অক্ষম করেছেন কিনা তা পরীক্ষা করতে, getUnusedAppRestrictionsStatus() API ব্যবহার করুন।

আপনার অ্যাপে কীভাবে এই API ব্যবহার করবেন তার অতিরিক্ত বিশদ বিবরণের জন্য, এই পৃষ্ঠায় API কোডের উদাহরণ দেখুন।

ব্যবহারকারীকে আপনার অ্যাপের জন্য হাইবারনেশন অক্ষম করতে বলুন

যদি ব্যবহারকারী ইতিমধ্যে আপনার অ্যাপের জন্য হাইবারনেশন অক্ষম না করে থাকে, তাহলে আপনি ব্যবহারকারীকে একটি অনুরোধ পাঠাতে পারেন। এটি করতে, এই পদক্ষেপগুলি সম্পূর্ণ করুন:

  1. একটি UI প্রদর্শন করুন যা ব্যবহারকারীকে ব্যাখ্যা করে যে কেন তাদের আপনার অ্যাপের জন্য হাইবারনেশন অক্ষম করতে হবে।
  2. API কোড উদাহরণে দেখানো হিসাবে createManageUnusedAppRestrictionsIntent() API চালু করুন। এই API একটি অভিপ্রায় তৈরি করে যা সেটিংসে অ্যাপের তথ্য স্ক্রীন লোড করে। এখান থেকে, ব্যবহারকারী আপনার অ্যাপের জন্য হাইবারনেশন বন্ধ করতে পারেন।

    এই উদ্দেশ্যটি পাঠানোর সময় আপনার startActivityForResult() কে কল করা গুরুত্বপূর্ণ, startActivity() নয়।

    সারণি 2 এ দেখানো হয়েছে, বিকল্পটির অবস্থান এবং নাম আপনার অ্যাপটি ইনস্টল করা ডিভাইসের বৈশিষ্ট্যের উপর নির্ভর করে:

    সারণী 2. বিকল্প যা আপনার অ্যাপের জন্য হাইবারনেশন অক্ষম করে
    ডিভাইসের বৈশিষ্ট্য পৃষ্ঠা যেখানে বিকল্পটি প্রদর্শিত হবে অফ করার অপশনের নাম
    Android 13 বা উচ্চতর সংস্করণ চালায় অ্যাপের তথ্য অব্যবহৃত হলে অ্যাপ কার্যকলাপ থামান
    Android 12 চালায় অ্যাপের তথ্য অনুমতিগুলি সরান এবং স্থান খালি করুন৷
    Android 11 চালায় অ্যাপের তথ্য > অনুমতি অ্যাপ ব্যবহার না করা হলে অনুমতি সরান
    অ্যান্ড্রয়েড 6.0 থেকে অ্যান্ড্রয়েড 10 চালায়, অন্তর্ভুক্ত, এবং এটি Google Play পরিষেবা দ্বারা চালিত প্লে অ্যাপ > মেনু > প্লে প্রোটেক্ট > অব্যবহৃত অ্যাপের অনুমতি অ্যাপ ব্যবহার না করা হলে অনুমতি সরান

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 অন্তর্ভুক্ত রয়েছে। যাইহোক, এপিআই শুধুমাত্র Android 11 বা উচ্চতর সংস্করণে চালিত ডিভাইসগুলিতে কাজ করে; এপিআই হাইবারনেশন বৈশিষ্ট্যগুলি পরিচালনা করে না যা পূর্ববর্তী অ্যান্ড্রয়েড সংস্করণগুলিতে ব্যাকপোর্ট করা হয়। অতএব, আমরা API ব্যবহার করার পরামর্শ দিই না।

সামঞ্জস্যের উদ্দেশ্যে সাময়িকভাবে এপিআই ব্যবহার চালিয়ে যেতে হলে, নিম্নলিখিত তালিকাটি দেখায় যে এটি কীভাবে ব্যবহার করবেন:

  • আপনার অ্যাপের জন্য হাইবারনেশন অক্ষম আছে কিনা তা পরীক্ষা করতে: isAutoRevokeWhitelisted()
  • ব্যবহারকারীকে হাইবারনেশন সেটিংস পৃষ্ঠায় পাঠাতে: ACTION_APPLICATION_DETAILS_SETTINGS ব্যবহার করে একটি অভিপ্রায় তৈরি করুন

ম্যানুয়ালি হাইবারনেশন আচরণ আহ্বান করুন

সিস্টেম আপনার অ্যাপটিকে হাইবারনেশন অবস্থায় রাখার পরে আপনার অ্যাপ কীভাবে আচরণ করে তা পরীক্ষা করতে, নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করুন:

  1. (শুধুমাত্র অ্যান্ড্রয়েড 12 এবং উচ্চতর) আপনার ডিভাইসে হাইবারনেশন আচরণ সক্ষম করুন:

    adb shell device_config put app_hibernation app_hibernation_enabled true
    
  2. হাইবারনেশনে প্রবেশ করার জন্য সিস্টেমটি অপেক্ষা করার জন্য ডিফল্ট সময় নির্ধারণ করুন। এইভাবে, আপনি পরীক্ষার পরে এটি পুনরুদ্ধার করতে পারেন:

    threshold=$(adb shell device_config get permissions \
      auto_revoke_unused_threshold_millis2)
    
  3. সিস্টেম অপেক্ষা করার সময় পরিমাণ কমান. নিম্নলিখিত উদাহরণে, সিস্টেমটি এমনভাবে পরিবর্তিত হয়েছে যে আপনি অ্যাপের সাথে ইন্টারঅ্যাক্ট করা বন্ধ করার পরে আপনার অ্যাপটি হাইবারনেশনে প্রবেশ করে:

    adb shell device_config put permissions \
      auto_revoke_unused_threshold_millis2 1000
    
  4. নিম্নলিখিত কমান্ডটি চালানোর মাধ্যমে আপনার পরীক্ষার ডিভাইসে বুট-টাইম সম্প্রচার শেষ হওয়ার জন্য অপেক্ষা করুন:

    adb shell am wait-for-broadcast-idle
    

    সম্প্রচার শেষ হলে, এই কমান্ডটি বার্তাটি ফেরত দেয়: All broadcast queues are idle!

  5. ম্যানুয়ালি অ্যাপ হাইবারনেশন প্রক্রিয়া চালু করুন:

    adb shell cmd jobscheduler run -u 0 -f \
      com.google.android.permissioncontroller 2
    
  6. (শুধুমাত্র Android 12 এবং উচ্চতর) নিশ্চিত করুন যে অ্যাপটি হাইবারনেট করা হয়েছে, নিম্নলিখিত পদ্ধতিগুলির মধ্যে একটি ব্যবহার করে:

    • লক্ষ্য করুন যে পরীক্ষার ডিভাইসটি এখন একটি বিজ্ঞপ্তি দেখায়, যা নির্দেশ করে যে অব্যবহৃত অ্যাপগুলি হাইবারনেট করা হয়েছে।
    • নিম্নলিখিত কমান্ড চালান:

      adb shell cmd app_hibernation get-state PACKAGE-NAME
      
  7. আপনার অ্যাপটিকে হাইবারনেশনে রাখার আগে সিস্টেমটি যে ডিফল্ট সময় অপেক্ষা করে তা পুনরুদ্ধার করুন:

    adb shell device_config put permissions \
      auto_revoke_unused_threshold_millis2 $threshold