Uygulamanız Android 11 (API düzeyi 30) veya sonraki bir sürümü hedefliyorsa ancak kullanıcı hedeflemiyorsa birkaç ay boyunca uygulamanızla etkileşimde bulunursanız sistem, hazırda bekleme durumunda olan bir uygulama kullanıyorsanız. Sistem, 2022'den beri depolama alanı için korurken sistem de kullanıcı verilerini koruyor. Bu sistem davranışı, kullanıcının uygulamanızı sistem ayarlarından manuel olarak zorla durdurması durumunda gerçekleşene benzer.
Hazırda beklemenin etkileri
Tablo 1'de gösterildiği gibi, uyku modunun etkileri uygulamanızın hedef SDK sürümüne ve uygulamanızın çalıştığı cihaza bağlıdır:
Hedef SDK sürümü | Cihazın özellikleri | Hazırda bekleme efektleri |
---|---|---|
Android 12 veya sonraki sürümler | Android 12 veya sonraki sürümleri çalıştıran cihazlar |
Uygulamanızın çalışma zamanında istenen izinleri sıfırlanır. Bu işlem, kullanıcının sistem ayarlarında bir izin görüntüledi ve uygulamanızın erişim düzeyini değiştirdi Deny değerine ayarlayın. Uygulamanız arka planda iş veya uyarı çalıştıramaz. Uygulamanız, Firebase Cloud Messaging üzerinden gönderilen yüksek öncelikli mesajlar da dahil olmak üzere push bildirimleri alamaz. Uygulamanızın önbelleğindeki tüm dosyalar kaldırılır. |
Android 11 | Android 11 yüklü olmalıdır. | Uygulamanızın çalışma zamanında istenen izinleri sıfırlanır. |
Android 11 | Android 6.0 (API düzeyi 23) ile Android 10 (API düzeyi 29) arasındaki sürümleri çalıştırır. ve Google tarafından desteklenmektedir. Play Hizmetleri |
Uygulamanızın çalışma zamanında istenen izinleri sıfırlanır. Bu davranış Aralık 2021'de yürürlüğe girecektir. Bu blogda daha fazla bilgi edinin hakkında yayınla oluşturma izinleri otomatik sıfırlama özelliği milyarlarca cihaz tarafından kullanılabilir. |
Bir uygulama uyku modundan çıktığında sistem davranışı
Kullanıcı uygulamanızla bir sonraki etkileşimde bulunduğunda uygulamanız hazırda bekleme modundan çıkar ve tekrar iş, uyarı ve bildirim oluşturabilir.
Ancak sistem, uygulamanız için aşağıdakileri yapmaz:
Uygulamanızın çalışma zamanı izinlerini yeniden verin.
Kullanıcının uygulamanız için bu izinleri yeniden vermesi gerekir.
Uygulamanız uyku moduna girmeden önce planlanmış tüm işleri, uyarıları ve bildirimleri yeniden planlayın.
Bu iş akışını daha kolay desteklemek için WorkManager değerleridir. Ayrıca, uygulamanız uyku modundan çıktığında ve cihaz açıldıktan sonra çağrılan
ACTION_BOOT_COMPLETED
yayın alıcısına yeniden planlama mantığı da ekleyebilirsiniz.
Uygulama kullanımı
Aşağıdaki bölümlerde uygulama kullanımıyla ilgili örneklerin yanı sıra ve sistemin uygulama kullanımı olarak kabul etmediği işlemlerdir.
Uygulama kullanımına örnekler
Uygulamanızdaki bir etkinlik devam ettirildiğinde, sistem bu etkinliği bir kullanıcı etkileşimi olarak kabul eder. Bu nedenle sistem, uygulamanızın uyku moduna geçmeden önceki süreyi uzatır.
Android 11 ve sonraki sürümlerde aşağıdaki davranışlar da kullanıcı etkileşimleri olarak kabul edilir:
Hazırda bekleme için uygulama kullanımının açıkça kullanıcı etkileşimi. Paketin bir bileşeni çağrıldığı sürece hâlâ çalışır değerlendirilebilir. Bu tür içeriğe ilişkin bazı örnekler:
- Cihazdaki başka bir uygulamaya bağlı bir hizmet veya içerik sağlayıcısı olan uygulamalar veya işletim sistemi. Örneğin, giriş yöntemi düzenleyiciler (IME'ler) veya şifre yöneticileri.
Paketteki yayın alıcıları, harici bir paketten açık bir yayın alıyor.
Örnek olmayanlar
Uygulamanız yalnızca aşağıdaki listede açıklanan davranışları sergiliyorsa: Uygulamanız birkaç ay sonra hazırda beklemeye girer:
JobScheduler
kullanarak planlanmış bir işi çalıştırır.- Örtülü bir yayın alır.
- Alarmları programlar.
Sistemlerin uyku modundan muaf tutulması
Android, belirli kullanım durumlarında uygulamayı hazırda bekletme özelliğinden sistem düzeyinde muafiyetler sağlar. Uygulamanız aşağıdaki kategorilerden birine giriyorsa uygulama muaftır uygulama kullanım standartlarından farklıdır ve hazırda beklemeye alınmaz.
- Başlatıcıda gösterilmeyen uygulamalar
- Başlatıcıda etkin bir kısayol kartına sahip olmayan tüm uygulamalar.
- İş profili uygulamaları
- Kullanıcının iş profiline yüklediği tüm uygulamalar. Aynı uygulama kişisel profilde de bulunuyorsa yalnızca iş profili uygulamasının muaf tutulduğunu unutmayın.
- Cihaz politikası denetleyicileri
- Cihazlardaki yerel cihaz politikalarını ve sistem uygulamalarını kontrol eden uygulamalar.
- Operatöre özel uygulamalar
- Cep telefonu operatörlerinin cihazlara önceden yüklediği ve sözleşme kapsamındaki hizmet yükümlülükleri için gerekli gördüğü uygulamalar (ör. sesli mesaj veya müşteri hizmetleri uygulamaları).
- 3. taraf yükleyici uygulamaları
- Yüklü uygulamalarının otomatik olarak güncellenmesi için üçüncü taraf uygulama mağazaları .
Hazırda bekleme süresinden kullanıcı muafiyetleri
Uygulamanızdaki temel kullanım alanlarından birinin hazırda bekleme modundan etkileneceğini tahmin ediyorsanız kullanıcıdan uygulamayı hazırda bekletme modundan muaf tutmasını isteyebilirsiniz. Bu muafiyet, kullanıcının uygulamanızla etkileşime geçmeden bile uygulamanızın öncelikle arka planda çalışmasını beklediği durumlarda (ör. uygulamanız aşağıdakilerden herhangi birini yaptığında) faydalıdır:
- Ailenin konumunu düzenli aralıklarla bildirerek aile güvenliği sağlayın ele alacağız.
- Bir cihaz ile uygulamanızın sunucusu arasında verileri senkronize edin.
- TV gibi akıllı cihazlarla iletişim kurma.
- Kol saati gibi tamamlayıcı cihazlarla eşleme
Muafiyet isteğinde bulunmak için aşağıdaki bölümlerde yer alan adımları tamamlayın.
Kullanıcının, uygulamanız için hazırda bekletmeyi devre dışı bırakıp bırakmadığını kontrol edin
Kullanıcının, uygulamanız için hazırda bekletmeyi zaten devre dışı bırakıp bırakmadığını kontrol etmek üzere
getUnusedAppRestrictionsStatus()
bağlantısını kullanın.
API'ye gidin.
Uygulamanızda bu API'yi nasıl kullanacağınızla ilgili ek ayrıntılar için bkz. API kod örneğine göz atın.
Kullanıcıdan uygulamanızın hazırda bekletmeyi devre dışı bırakmasını isteyin
Kullanıcı, uygulamanız için hazırda bekletmeyi daha önce devre dışı bırakmadıysa bir kullanıcıya isteği gönderir. Bunun için aşağıdaki adımları uygulayın:
- Kullanıcıya neden devre dışı bırakması gerektiğini açıklayan bir kullanıcı arayüzü gösterin hazırda beklemeye almanız gerekir.
-
API kodu örneğinde gösterildiği gibi
createManageUnusedAppRestrictionsIntent()
API'yi çağırın. Bu API, Ayarlar'da Uygulama bilgileri ekranını yükleyen bir intent oluşturur. Buradan kullanıcı, uygulamanızın hazırda bekletme özelliğini devre dışı bırakabilir.Bu intent'i gönderirken
startActivity()
yerinestartActivityForResult()
çağrısını yapmanız önemlidir.Tablo 2'de gösterildiği gibi, seçeneğin konumu ve adı, uygulamanızın yüklü olduğu cihazın özelliklerine bağlıdır:
Tablo 2. Uygulamanız için hazırda bekletme özelliğini devre dışı bırakan seçenek Cihazın özellikleri Seçeneğin gösterildiği sayfa Devre dışı bırakılacak seçeneğin adı Android 13 veya sonraki sürümleri çalıştıran cihazlar Uygulama bilgisi Kullanılmayan uygulama etkinliğini duraklat Android 12 yüklü olmalıdır. Uygulama bilgisi İzinleri kaldırıp yer aç Android 11 yüklü olmalıdır. Uygulama bilgileri > İzinler Uygulama kullanılmıyorsa izinleri kaldır Android 6.0 ile Android 10 dahil olmak üzere sürümleri çalıştıran ve Google Play tarafından desteklenmektedir hizmetler Play uygulaması > Menü > Play Protect > Kullanılmayan Uygulamalar için İzinler Uygulama kullanılmıyorsa izinleri kaldırma
API kodu örneği
Bu kod örneğinde, ve kullanıcılardan uygulamanız için hazırda bekletmeyi devre dışı bırakmalarını istemenin doğru yolunu bulun.
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) }
Eski platform API'si
İşletim sistemi, hazırda bekleme özelliğiyle etkileşim kurmak için bir API de içerir. Ancak API yalnızca Android 11 veya sonraki sürümleri çalıştıran cihazlarda çalışır. API, önceki Android sürümlerine geri bağlanan uyku modu özelliklerini işlemez. Bu nedenle API'yi kullanmanızı önermeyiz.
Uyumluluk amacıyla API'yi geçici olarak kullanmaya devam etmeniz gerekiyorsa nasıl kullanılacağı aşağıdaki listede gösterilmektedir:
- Uygulamanızda hazırda beklemenin devre dışı bırakılıp bırakılmadığını kontrol etmek için:
isAutoRevokeWhitelisted()
- Kullanıcıyı uyku ayarları sayfasına yönlendirmek için:
ACTION_APPLICATION_DETAILS_SETTINGS
öğesini kullanarak bir Intent oluşturun.
Hazırda bekleme davranışını manuel olarak başlat
Sistem uygulamanızı hazırda bekleme moduna aldıktan sonra uygulamanızın nasıl davrandığını test etmek için aşağıdaki adımları tamamlayın:
(Yalnızca Android 12 ve sonraki sürümler) Cihazınızda hazırda bekleme davranışını etkinleştirin. cihaz:
adb shell device_config put app_hibernation app_hibernation_enabled true
Sistemin hazırda bekleme moduna girmek için beklediği varsayılan süreyi ayarlayın. Bu şekilde, dosyayı test ettikten sonra geri yükleyebilirsiniz:
threshold=$(adb shell device_config get permissions \ auto_revoke_unused_threshold_millis2)
Sistemin bekleme süresini azaltın. Aşağıdaki örnekte, sistem, uygulamanızın yalnızca bir saniye hazırda beklemeye gireceği şekilde değiştirilmiş Uygulamayla etkileşimi bıraktıktan sonra:
adb shell device_config put permissions \ auto_revoke_unused_threshold_millis2 1000
Aşağıdaki komutu çalıştırarak test cihazınızdaki önyükleme sırasındaki yayınların tamamlanmasını bekleyin:
adb shell am wait-for-broadcast-idle
Yayınlar tamamlandığında, bu komut şu mesajı döndürür:
All broadcast queues are idle!
.Uygulamayı hazırda bekletme işlemini manuel olarak çağırın:
adb shell cmd jobscheduler run -u 0 -f \ com.google.android.permissioncontroller 2
(Yalnızca Android 12 ve sonraki sürümler) Uygulamayı kullanarak hazırda beklemeye alındığını onaylayın aşağıdaki yöntemlerden birini tercih edebilirsiniz:
- Test cihazında artık, test sırasında kullanılmayan uygulamalar hazırda bekletilir.
Aşağıdaki komutu çalıştırın:
adb shell cmd app_hibernation get-state
PACKAGE-NAME
Sistemin, uygulamanızı uyku moduna almadan önce beklediği varsayılan süreyi geri yükleyin:
adb shell device_config put permissions \ auto_revoke_unused_threshold_millis2 $threshold