إذا كان تطبيقك يستهدف الإصدار 11 من نظام التشغيل Android (المستوى 30 لواجهة برمجة التطبيقات) أو إصدارًا أحدث، ولم يتفاعل المستخدم مع تطبيقك لعدة أشهر، سيضع النظام تطبيقك في حالة الاستراحة. يعمل النظام على تحسين مساحة التخزين بدلاً من الأداء، ويحمي النظام بيانات المستخدمين. يشبه سلوك النظام هذا ما يحدث عندما يوقف المستخدم تطبيقك يدويًا من إعدادات النظام.
تأثيرات وضع الإسبات
كما هو موضّح في الجدول 1، تعتمد تأثيرات وضع السكون على إصدار حِزمة تطوير البرامج (SDK) المستهدفة لتطبيقك، بالإضافة إلى الجهاز الذي يعمل عليه تطبيقك:
إصدار حزمة SDK المستهدفة | خصائص الجهاز | تأثيرات وضع الإسبات |
---|---|---|
الإصدار 12 من نظام التشغيل Android أو إصدار أحدث | يعمل بالإصدار 12 من نظام التشغيل Android أو إصدار أحدث |
تتم إعادة ضبط أذونات تشغيل تطبيقك. يُحدث هذا الإجراء التأثير نفسه الذي يحدثه المستخدم عند الاطّلاع على إذن في إعدادات النظام وتغيير مستوى وصول تطبيقك إلى رفض. لا يمكن لتطبيقك تنفيذ مهام أو تنبيهات من الخلفية. لا يمكن لتطبيقك تلقّي إشعارات فورية، بما في ذلك الرسائل ذات الأولوية العالية التي يتم إرسالها من خلال المراسلة عبر سحابة Firebase الإلكترونية. تتم إزالة أي ملفات في ذاكرة التخزين المؤقت للتطبيق. |
Android 11 | يعمل بنظام التشغيل Android 11 | تتم إعادة ضبط أذونات التشغيل لتطبيقك. |
الإصدار 11 من نظام التشغيل Android | تعمل بالإصدار 6.0 من Android (المستوى 23 من واجهة برمجة التطبيقات) إلى الإصدار 10 من Android (المستوى 29 من واجهة برمجة التطبيقات) على الأقل، وتستخدم "خدمات Google Play" |
تتم إعادة ضبط أذونات تشغيل تطبيقك. سيسري هذا السلوك في كانون الأول (ديسمبر) 2021. يمكنك الاطّلاع على مزيد من المعلومات في مشاركة المدونة هذه عن إتاحة ميزة إعادة ضبط الأذونات تلقائيًا على مليارات الأجهزة الإضافية. |
سلوك النظام عند خروج أحد التطبيقات من وضع السكون
عندما يتفاعل المستخدم مع تطبيقك في المرة التالية، يخرج تطبيقك من وضع السكون، ويمكنه إنشاء مهام وتنبيهات وإشعارات مرة أخرى.
ومع ذلك، لا ينفِّذ النظام الإجراءات التالية مع تطبيقك:
إعادة منح أذونات التشغيل لتطبيقك
على المستخدم إعادة منح هذه الأذونات لتطبيقك.
إعادة جدولة أي مهام وتنبيهات وإشعارات تم تحديد موعدها قبل دخول تطبيقك في وضع السكون
لتسهيل سير العمل هذا، استخدِم WorkManager. يمكنك أيضًا إضافة منطق إعادة الجدولة في
ACTION_BOOT_COMPLETED
مستقبل البث الذي يتم تشغيله عندما يخرج تطبيقك من وضع السكون بعد تشغيل الجهاز.
استخدام التطبيق
تقدّم الأقسام التالية أمثلة على استخدام التطبيق، بالإضافة إلى أمثلة على الإجراءات التي لا يعتبرها النظام استخدامًا للتطبيق.
أمثلة على استخدام التطبيق
عندما يتم استئناف نشاط في تطبيقك، يعتبر النظام هذا الحدث تفاعلًا من المستخدِم. لذلك، يمدّد النظام المدة الزمنية قبل أن يدخل تطبيقك في وضع السكون.
في الإصدار 11 من نظام التشغيل Android والإصدارات الأحدث، يتم أيضًا اعتبار السلوكيات التالية تفاعلات المستخدمين:
وتجدر ملاحظة أن استخدام التطبيق لوضع الإسبات لا يتطلب صراحةً تفاعل المستخدم. طالما يتمّ استدعاء أحد مكوّنات الحزمة، سيظلّ يُعتبَر استخدامًا للتطبيق. في ما يلي بعض الأمثلة على ذلك:
- التطبيقات التي توفّر خدمة أو محتوى من خلال موفّر مرتبط بتطبيق آخر على الجهاز أو نظام التشغيل على سبيل المثال، محرّرات طرق الإدخال أو تطبيقات إدارة كلمات المرور.
عناصر البث في الحزمة التي تتلقّى بثًا صريحًا من حزمة خارجية
غير الأمثلة
إذا كان تطبيقك لا يعرض سوى السلوكيات الموضّحة في القائمة التالية، سيدخل تطبيقك في وضع السكون بعد بضعة أشهر:
- تشغيل وظيفة مجدوَلة باستخدام
JobScheduler
- تلقّي بث ضمني
- جدولة المنبّهات
استثناءات النظام من وضع السكون
يمنح Android استثناءات على مستوى النظام من إسبات التطبيق في بعض حالات الاستخدام. إذا كان تطبيقك يندرج ضمن إحدى الفئات التالية، سيتم إعفاؤه من معايير استخدام التطبيقات ولن يتم وضعه في وضع السكون.
- التطبيقات التي لا تظهر في مشغّل التطبيقات
- أي تطبيق لا يتضمّن مربّع اختصار نشطًا على مشغّل التطبيقات
- تطبيقات ملف العمل
- أي تطبيق يثبّته المستخدم على ملف شخصي للعمل يُرجى العِلم بأنّه إذا كان التطبيق نفسه متوفّرًا أيضًا على ملف شخصي، سيتم استثناء تطبيق ملف العمل فقط.
- وحدات التحكّم بسياسات الأجهزة
- التطبيقات التي تتحكّم في سياسات الجهاز المحلية وتطبيقات النظام على الأجهزة
- تطبيقات مشغِّل شبكة الجوّال
- أي تطبيق يحمِّله مشغّلو شبكات الهواتف الجوّالة مسبقًا على الأجهزة ويعتبرونه ضروريًا لتحقيق التزامات الخدمة التعاقدية، مثل تطبيقات البريد الصوتي أو خدمة العملاء
- تطبيقات أداة تثبيت تابعة لجهات خارجية
- متاجر التطبيقات التابعة لجهات خارجية للحصول على التحديثات التلقائية للتطبيقات المثبّتة عند الضرورة.
استثناءات المستخدمين من الإسبات
إذا كنت تتوقّع أن تتأثّر حالة استخدام أساسية في تطبيقك بميزة "الوضع المنخفض الطاقة"، يمكنك طلب إعفاء من المستخدم من هذه الميزة. يكون هذا الاستثناء مفيداً في الحالات التي يتوقّع فيها المستخدم أن يعمل تطبيقك بشكل أساسي في الخلفية، حتى بدون تفاعل المستخدم معه، مثل الحالات التي يؤدي فيها تطبيقك إلى أي مما يلي:
- ضمان سلامة العائلة من خلال الإبلاغ بصفة دورية عن الموقع الجغرافي لأفراد العائلة
- مزامنة البيانات بين جهاز وخوادم تطبيقك
- التواصل مع الأجهزة الذكية، مثل التلفزيون
- الإقران بالأجهزة المصاحبة، مثل الساعة
لطلب إعفاء، يُرجى إكمال الخطوات الواردة في الأقسام التالية.
التحقّق مما إذا كان المستخدم قد أوقف وضع السكون لتطبيقك
للتحقّق مما إذا كان المستخدم قد أوقف وضع السكون لتطبيقك،
استخدِم واجهة برمجة التطبيقات getUnusedAppRestrictionsStatus()
.
للحصول على تفاصيل إضافية حول كيفية استخدام واجهة برمجة التطبيقات هذه في تطبيقك، يُرجى الاطّلاع على مثال على رمز واجهة برمجة التطبيقات في هذه الصفحة.
اطلب من المستخدم إيقاف وضع السكون لتطبيقك.
إذا لم يسبق للمستخدم إيقاف وضع السكون لتطبيقك، يمكنك إرسال طلب إليه. لإجراء ذلك، يُرجى اتّباع الخطوات التالية:
- عرض واجهة مستخدم توضّح للمستخدم سبب إيقاف وضع Hibernation (الاستراحة) في تطبيقك
-
استخدِم واجهة برمجة التطبيقات
createManageUnusedAppRestrictionsIntent()
، كما هو موضّح في مثال رمز واجهة برمجة التطبيقات. تنشئ واجهة برمجة التطبيقات هذه نية تحمّل شاشة معلومات التطبيق في "الإعدادات". من هنا، يمكن للمستخدم إيقاف الإسبات لتطبيقك.من المهمّ أن تطلب
startActivityForResult()
، وليسstartActivity()
، عند إرسال هذا الطلب.كما هو موضّح في الجدول 2، يعتمد موقع الخيار واسمه على سمات الجهاز الذي تم تثبيت تطبيقك عليه:
الجدول 2: خيار يوقِف الإسبات لتطبيقك خصائص الجهاز الصفحة التي يظهر فيها الخيار اسم الخيار المطلوب إيقافه يعمل بالإصدار 13 من نظام التشغيل Android أو إصدار أحدث معلومات التطبيقات إيقاف نشاط التطبيق مؤقتًا عند عدم استخدامه يعمل بنظام التشغيل Android 12 معلومات التطبيقات إزالة الأذونات وإخلاء بعض المساحة يعمل بنظام التشغيل Android 11 معلومات التطبيق > الأذونات إزالة الأذونات في حال عدم استخدام التطبيق يعمل بالإصدارات من Android 6.0 إلى Android 10، ويستخدم خدمات Google Play تطبيق Play > القائمة > Play للحماية > أذونات التطبيقات غير المستخدمة إزالة الأذونات في حال عدم استخدام التطبيق
مثال على رمز واجهة برمجة التطبيقات
يوضّح مثال الرمز البرمجي هذا كيفية التحقّق مما إذا كان وضع السكون مفعّلاً في تطبيقك، والطريقة الصحيحة لطلب المستخدمين إيقاف وضع السكون في تطبيقك.
Kotlin
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) }
واجهة برمجة التطبيقات القديمة للنظام الأساسي
يتضمّن نظام التشغيل أيضًا واجهة برمجة تطبيقات للتفاعل مع ميزة "الوضع الإسبات". ومع ذلك، لا تعمل واجهة برمجة التطبيقات إلا على الأجهزة التي تعمل بالإصدار 11 من Android أو الإصدارات الأحدث، ولا تتعامل واجهة برمجة التطبيقات مع ميزات السكون التي تم نقلها إلى إصدارات Android الأقدم. لذلك، لا ننصح باستخدام واجهة برمجة التطبيقات.
إذا كنت بحاجة إلى مواصلة استخدام واجهة برمجة التطبيقات مؤقتًا لأغراض التوافق، توضّح القائمة التالية كيفية استخدامها:
- لمعرفة ما إذا تم إيقاف الإسبات لتطبيقك:
isAutoRevokeWhitelisted()
- لإرسال المستخدم إلى صفحة إعدادات وضع السكون: أنشئ نية باستخدام
ACTION_APPLICATION_DETAILS_SETTINGS
.
استدعاء سلوك الإسبات يدويًا
لاختبار سلوك تطبيقك بعد أن يضع النظام تطبيقك في حالة ملف التمهيد العميق، أكمِل الخطوات التالية:
(Android 12 والإصدارات الأحدث فقط) فعِّل سلوك السكون على جهازك:
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
(Android 12 والإصدارات الأحدث فقط) تأكَّد من أنّ التطبيق في وضع الإسبات باستخدام إحدى الطريَق التالية:
- يُرجى ملاحظة أنّ الجهاز التجريبي يعرض الآن إشعارًا يشير إلى أنّه تم وضع التطبيقات التي لم يتم استخدامها في وضع السكون.
نفِّذ الأمر التالي:
adb shell cmd app_hibernation get-state PACKAGE-NAME
استعادة المدة التلقائية التي ينتظرها النظام قبل وضع تطبيقك في وضع السكون:
adb shell device_config put permissions \ auto_revoke_unused_threshold_millis2 $threshold