Cihazı uyanık tutma

Boşta kalan bir Android cihaz, pilin boşalmasını önlemek için hızlıca düşüyor uykuda. Ancak bazen bir uygulamanın ekranı uyandırması gerekebilir veya CPU'yu açık tutun ve bazı işleri tamamlamak için açık tutun.

Uygulayacağınız yaklaşım, uygulamanızın ihtiyaçlarına bağlıdır. Ancak genel bir kural, işletmeniz için mümkün olan en hafif yaklaşımı benimsemeniz, uygulamasını kullanın. Aşağıdaki bölümler cihazın varsayılan uyku davranışının nasıl ele alınacağını açıkla uygulamanızın şartlarıyla uyumlu değildir.

Uyanık kalma kilitlerini kullanmaya alternatifler

Uygulamanıza uyanık kalma kilidi desteği eklemeden önce, uygulamanızın destek kaydı aşağıdaki alternatif çözümlerden birini destekler:

  • Uygulamanız uzun süreli HTTP indirmeleri yapıyorsa şunu kullanmayı düşünün: DownloadManager.

  • Uygulamanız harici bir sunucudaki verileri senkronize ediyorsa, bir senkronizasyon adaptörü başlıklı makaleyi inceleyin.

  • Uygulamanız arka plan hizmetlerini kullanıyorsa JobScheduler veya Firebase Cloud Messaging bu hizmetleri belirli aralıklarla tetiklemek için.

  • Tamamlayıcı cihaz yanınızdayken tamamlayıcı uygulamanızı çalıştırmaya devam etmeniz gerekiyorsa Companion Cihaz Yöneticisi'ni kullanın.

Ekranı açık tutma

Oyunlar veya film uygulamaları gibi bazı uygulamaların ekranı açık tutması gerekir. İlgili içeriği oluşturmak için kullanılan bunun en iyi yolu FLAG_KEEP_SCREEN_ON etkinliğinde (ve yalnızca bir etkinlikte, hiçbir zaman bir hizmette veya başka bir uygulamada) bileşeni). Örnek:

Kotlin

class MainActivity : Activity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
    }
}

Java

public class MainActivity extends Activity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
  }
}

Bu yaklaşımın avantajı, uyanık kalma kilitlerinin aksine ( CPU Açık), özel bir izin gerektirmez ve Böylece, uygulamanızın başka bir uygulamaya ihtiyaç duymadan uygulamalar arasında geçiş yapmasını endişeleri gidereceksiniz.

Bunu uygulamanın başka bir yolu da android:keepScreenOn özelliği:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:keepScreenOn="true">
    ...
</RelativeLayout>

android:keepScreenOn="true" kullanımı, FLAG_KEEP_SCREEN_ON Uygulamanız için en uygun yaklaşımı kullanabilirsiniz. Bir ayarlamanın avantajı işleminizdeki işaret, size şu seçeneği sunmasıdır: bayrağı programlı bir şekilde temizler ve böylece, ekranın açık bir şekilde kapalı.

TV İçin Ambiyans Modu

TV'de FLAG_KEEP_SCREEN_ON veya e-posta ile gelmesini önlemek için Ambiyans Modu aktif video oynatma sırasında. FLAG_KEEP_SCREEN_ON ayarlanmadığında ön plan etkinliğine göre cihaz otomatik olarak Ambiyans Modu'na girer bir süre işlem yapılmadığında.

CPU'yu açık tut

İşlem tamamlamadan önce bazı işlemleri tamamlamak için CPU'yu çalışır durumda tutmanız gerekiyorsa uyku moduna geçerse bir PowerManager sistem hizmeti özelliği kullanıma sunduk. Uyanık kalma kilitleri, uygulamanızın güç durumunu kontrol etmesini sağlar ait verilerdir.

Uyanık kalma kilitleri oluşturup bu ayarları tutmanın ana cihazın çalışma zamanı üzerinde pil ömrü. Bu nedenle, uyanık kalma kilitlerini sadece kesinlikle gerekli olduğunda ve mümkün olduğunca kısa bir süre tutun. Örneğin hiçbir zaman bir aktivitede uyanık kalma kilidi kullanabilir. Yukarıda açıklandığı gibi, kullanıyorsanız FLAG_KEEP_SCREEN_ON.

Uyanık kalma kilidi kullanmanın geçerli bir nedeni, ekran açıkken CPU'nun çalışmaya devam etmesi için bir uyanık kalma kilidi tutması kapalı. Ancak bu uygulama da geleneksel Şelale proje yönetimi üzerine etkisi pil ömrü.

Uyanık kalma kilidi kullanmak için ilk adım Şu işlemler için WAKE_LOCK izni: uygulamanızın manifest dosyasına ekleyin:

<uses-permission android:name="android.permission.WAKE_LOCK" />

Uygulamanız bazı işler için hizmet kullanan bir yayın alıcı içeriyorsa uyanık kalma kilidini şu şekilde doğrudan ayarlayabilirsiniz:

Kotlin

val wakeLock: PowerManager.WakeLock =
        (getSystemService(Context.POWER_SERVICE) as PowerManager).run {
            newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyApp::MyWakelockTag").apply {
                acquire()
            }
        }

Java

PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
        "MyApp::MyWakelockTag");
wakeLock.acquire();

Uyanık kalma kilidini açmak için şunu arayın: wakelock.release(). Bu, iddianızı CPU'ya bıraktırır. Uyanık kalma kilidinin açılması önemlidir; uygulamanız biter bitmez.