SoC güç durumları
Bir çipteki (SoC) sistemin güç durumları şunlardır: açık, boşta ve askıya alınmış. “Açık”, SoC'nin çalıştığı zamandır. “Boşta”, SoC'ye güç verildiği ancak herhangi bir görev gerçekleştirmediği orta güç modudur. “Askıya Alma”, SoC'ye güç verilmeyen düşük güç modudur. Cihazın bu modda güç tüketimi genellikle "Açık" moduna göre 100 kat daha azdır.
Uyanmayan sensörler
Uyanmayan sensörler, SoC'nin askıya alma moduna geçmesini engellemeyen ve verileri raporlamak için SoC'yi uyandırmayan sensörlerdir. Özellikle sürücülerin uyandırma kilidi tutmasına izin verilmiyor. Ekran kapalıyken uyanmayan sensörlerden olay almak istemeleri durumunda kısmi uyanık kalma kilidini tutmak uygulamaların sorumluluğundadır. SoC askıya alma modundayken sensörlerin çalışmaya devam etmesi ve donanım FIFO'suna yerleştirilen olayları üretmesi gerekir. (Daha fazla ayrıntı için Toplu İşleme'ye bakın.) FIFO'daki olaylar, SoC uyandığında uygulamalara iletilir. FIFO tüm olayları depolayamayacak kadar küçükse eski olaylar kaybolur; En yeni verileri barındırmak için en eski veriler çıkarılır. FIFO'nun mevcut olmadığı olağanüstü durumda, SoC askıya alma modundayken oluşturulan tüm olaylar kaybolur. Bunun bir istisnası, her bir değişim sensöründen gelen en son olaydır: son olayın, kaybolmaması için FIFO'nun dışına kaydedilmesi gerekir .
SoC askıya alma modundan çıkar çıkmaz FIFO'daki tüm olaylar raporlanır ve işlemler normal şekilde devam eder.
Uyandırılmayan sensörler kullanan uygulamalar, sistemin askıya alınmamasını sağlamak için bir uyandırma kilidi tutmalı, ihtiyaç duymadıklarında sensörlerin kaydını silmeli veya SoC askıya alma modundayken etkinlikleri kaybetmeyi beklemelidir.
Uyandırma sensörleri
Uyandırma özelliği olmayan sensörlerin aksine, uyandırma sensörleri verilerinin SoC'nin durumundan bağımsız olarak iletilmesini sağlar. SoC uyanıkken, uyandırma sensörleri uyanmayan sensörler gibi davranır. SoC uykudayken, uyandırma sensörlerinin olayları iletmek için SoC'yi uyandırması gerekir. Yine de SoC'nin askıya alma moduna geçmesine izin vermeleri gerekiyor, ancak aynı zamanda bir olayın raporlanması gerektiğinde onu uyandırmaları da gerekiyor. Yani, sensörün SoC'yi uyandırması ve maksimum raporlama gecikmesi dolmadan veya donanım FIFO'su dolmadan önce olayları iletmesi gerekir. Daha fazla ayrıntı için Toplu İşleme'ye bakın.
Uygulamaların, SoC tekrar uyku moduna geçmeden önce olayı alacak zamana sahip olmasını sağlamak için, sürücünün her bir olay raporlandığında 200 milisaniye boyunca bir "zaman aşımı uyandırma kilidi" tutması gerekir. Yani SoC'nin uyanma kesintisinden sonraki 200 milisaniye içinde tekrar uyku moduna geçmesine izin verilmemelidir. Bu gereksinim gelecekteki bir Android sürümünde ortadan kalkacak ve o zamana kadar bu zaman aşımı uyandırma kilidine ihtiyacımız var.
Uyandırma ve uyanmama sensörleri nasıl tanımlanır?
KitKat'a kadar, bir sensörün uyandırma sensörü olup olmadığı, sensör tipine göre belirleniyordu: yakınlık sensörü ve önemli hareket dedektörü hariç çoğu, uyanmayan sensörlerdi.
L'den başlayarak, belirli bir sensörün uyandırma sensörü olup olmadığı, sensör tanımındaki bir bayrakla belirtilir. Çoğu sensör, aynı sensörün uyanan ve uyanmayan değişken çiftleri tarafından tanımlanabilir; bu durumda birbirleriyle etkileşime girmeyen iki bağımsız sensör gibi davranmaları gerekir. Daha fazla ayrıntı için Etkileşim'e bakın.
Sensör türü tanımında aksi belirtilmediği sürece, Sensör türleri bölümünde listelenen her sensör türü için bir uyanma sensörü ve bir uyanmayan sensör uygulanması önerilir. Her sensör türü tanımında, SensorManager.getDefaultSensor(sensorType)
tarafından hangi sensörün (uyanan veya uyanmayan) döndürüleceğine bakın. Çoğu uygulamanın kullanacağı sensördür.