Android çerçevesi sayesinde cihaz üreticileri ve uygulama geliştiricileri, bir cihazın aşırı ısınmaya başlaması durumunda tutarlı bir kullanıcı deneyimi (UX) sağlamak için termal verileri kullanabilir. Örneğin, bir sistem termal strese maruz kaldığında jobscheduler
işleri kısıtlanır ve gerekirse çerçeve termal kapatması başlatılır. PowerManager
sınıfında kayıtlı bir geri arama aracılığıyla termal stres bildirimleri alan uygulamalar, kullanıcı deneyimlerini zarif bir şekilde ayarlayabilir.
Termal HAL
Android 9 ve daha düşük sürümler, sıcaklık ölçümlerini almak için Termal HAL 1.0'da tanımlanan bir yoklama arayüzünü kullanır. Bu HAL, Android çerçevesinin ve bir cihaz üreticisinin HAL'si gibi diğer güvenilir istemcilerin, aynı API aracılığıyla her sensör için mevcut sıcaklığı ve ürün politikasına özgü kısıtlama ve kapatma eşiklerini okumasına olanak tanıdı.
Android 10, Android çerçevesinde bir termal sistem ve termal alt sistem donanım cihazlarının arayüzünü soyutlayan HAL'in yeni bir sürümü olan Thermal HAL 2.0'ı tanıttı. Donanım arayüzünde cilt, pil, GPU, CPU ve USB bağlantı noktası için sıcaklık sensörleri ve termistörler bulunur. Cihaz yüzey sıcaklığı, cihaz yüzey sıcaklığının belirlenen termal limitler dahilinde tutulması için takip edilmesi gereken en önemli sistemdir.
Ek olarak, Termal HAL 2.0, termal stresi belirtmek için birden fazla müşteriye termal sensör okumaları ve ilgili şiddet seviyelerini sağlar. Aşağıdaki şekilde Android Sistem Kullanıcı Arayüzünden gelen iki uyarı mesajı gösterilmektedir. Bu mesajlar, sırasıyla USB_PORT
ve SKIN
sensörleri için IThermalEventListener
geri çağırma arayüzü THERMAL_STATUS_EMERGENCY
önem düzeyine ulaştığında görüntülenir.
Şekil 1. Aşırı ısınma uyarıları.
IThermal HAL aracılığıyla farklı tipteki termal sensörler için mevcut sıcaklıklar alınır. Her işlev çağrısı SUCCESS
veya FAILURE
durum değerini döndürür. SUCCESS
döndürülürse süreç devam eder. FAILURE
döndürülürse, insan tarafından okunabilir olması gereken bir hata mesajı status.debugMessage
gönderilir.
Geçerli sıcaklıkları döndüren bir yoklama arayüzü olmasının yanı sıra, IThermalChangedCallback
(HIDL, Android 10'dan 13'e kadar) veya IThermalChangedCallback
(AIDL, Android 14 ve üstü) çerçevenin istemcileri gibi termal HAL istemcilerinden geri çağırma arayüzüyle birlikte kullanabilirsiniz. termal servis. Örneğin, ciddiyeti değişen olayları kaydetmek veya kaydını silmek için RegisterIThermalChangedCallback
ve UnregisterIThermalChangedCallback
. Belirli bir sensörün termal ciddiyeti değiştiyse notifyThrottling
, termal olay dinleyicilerine bir termal azaltma olayı geri çağrısı gönderir.
Termal sensör bilgilerine ek olarak, getCurrentCoolingDevices
azaltılmış soğutma cihazlarının bir listesi gösterilir. Bu listenin sırası, bir soğutma cihazı çevrimdışı olsa bile kalıcıdır. Cihaz üreticileri statsd
ölçümleri toplamak için listeyi kullanabilir.
Daha fazla bilgi için Referans uygulamasına bakın.
Kendi uzantılarınızı ekleyebilseniz de termal azaltma işlevini devre dışı bırakmamalısınız.
Termal servis
Android 10 ve üzeri sürümlerde, çerçevedeki termal hizmet, Thermal HAL 2.0'dan gelen çeşitli azaltma sinyallerini kullanarak sürekli izleme sağlar ve istemcilerine kısıtlama ciddiyeti geri bildirimi verir. Bu istemciler dahili bileşenleri ve Android uygulamalarını içerir. Hizmet, geri arama olarak kullanıma sunulan IThermalEventListener
ve IThermalStatusListener
adlı iki bağlayıcı geri çağırma arabirimini kullanır. İlki dahili platform ve cihaz üreticisinin kullanımı içindir, ikincisi ise Android uygulamaları içindir.
Geri arama arayüzleri aracılığıyla, bir cihazın mevcut termal durumu, 0x00000000
(kısma yok) ila 0x00000006
(cihaz kapatma) arasında değişen bir tamsayı değeri olarak alınabilir. Ayrıntılı termal sensör ve termal olay bilgilerine yalnızca Android API veya cihaz üreticisi API'si gibi güvenilir bir sistem hizmeti erişebilir. Aşağıdaki şekilde Android 10 ve sonraki sürümlerde termal azaltma süreci akışının bir modeli sağlanmaktadır:
Şekil 2. Android 10 ve sonraki sürümlerde termal azaltma süreci akışı.
Cihaz üreticisi yönergeleri
Android 10'dan 13'e kadar cihaz sıcaklık sensörünü ve kısıtlama durumunu raporlamak için cihaz üreticilerinin Termal HAL 2.0'ın ( IThermal.hal
) HIDL özelliğini uygulaması gerekir.
Android 14 için cihaz sıcaklık sensörünü ve kısıtlama durumunu raporlamak için cihaz üreticilerinin Termal HAL 2.0'ın ( IThermal.aidl
) AIDL özelliğini uygulaması gerekir.
Pil gücü kısıtlamaları da dahil olmak üzere cihaz performansını azaltan her şey termal HAL aracılığıyla rapor edilmelidir. Bunun gerçekleşmesini sağlamak için, azaltma ihtiyacını gösterebilecek (durum değişikliklerine bağlı olarak) tüm sensörleri termal HAL'ye yerleştirin ve gerçekleştirilen tüm azaltma eylemlerinin ciddiyetini bildirin. Bir sensör okumasından döndürülen sıcaklık değerinin, karşılık gelen şiddet eşiğini doğru bir şekilde yansıttığı sürece gerçek sıcaklık olması gerekmez. Örneğin, gerçek sıcaklık eşik değerleriniz yerine farklı sayısal değerler iletebilir veya histerezis sağlamak için eşik spesifikasyonlarına koruma bandı oluşturabilirsiniz. Ancak bu değere karşılık gelen önem derecesi, o eşikte ihtiyaç duyulan önemle eşleşmelidir. Örneğin, gerçek sıcaklık 65°C olduğunda ve belirttiğiniz kritik şiddete karşılık geldiğinde, kritik sıcaklık eşiğiniz olarak 72°C'yi geri döndürmeye karar verebilirsiniz. En iyi termal çerçeve işlevselliği için önem düzeyi doğru olmalıdır.
Çerçevedeki eşik düzeyleri ve bunların azaltma eylemlerine nasıl karşılık geldiği hakkında daha fazla bilgi edinmek için bkz . Termal durum kodlarını kullanma .
Termal API'leri kullanın
Uygulamalar, dinleyicileri ekleyip kaldırabilir ve PowerManager
sınıfı aracılığıyla termal durum bilgilerine erişebilir. IThermal
arayüzü, termal durum değerlerinin döndürülmesi de dahil olmak üzere ihtiyaç duyulan tüm işlevleri sağlar. ITermal bağlayıcı arayüzü , uygulamaların termal durum dinleyicilerini kaydederken veya kaldırırken kullanabileceği OnThermalStatusChangedListener
arayüzü olarak sarmalanmıştır.
Android termal API'leri, uygulamaların PowerManager
sınıfında tanımlanan durum kodları aracılığıyla termal önem düzeylerinden haberdar edilmesi için hem geri çağırma hem de yoklama yöntemlerine sahiptir. Yöntemler şunlardır:
-
getCurrentThermalStatus()
cihaz kısıtlamaya girmediği sürece cihazın mevcut termal durumunu bir tamsayı olarak döndürür. -
addThermalStatusListener()
bir dinleyici ekler. -
removeThermalStatusListener()
önceden eklenmiş bir dinleyiciyi kaldırır.
Termal durum kodlarını kullanın
Termal durum kodları, veri toplamak ve optimum kullanıcı deneyimini tasarlamak için kullanabileceğiniz belirli kısıtlama düzeylerine dönüşür. Örneğin, uygulamalar 0x00000000
( THERMAL_STATUS_NONE
) durumunu alabilir ve bu durum daha sonra 0x00000001
( THERMAL_STATUS_LIGHT
) olarak değişebilir. 0x00000000
durumunun t0 olarak işaretlenmesi, ardından THERMAL_STATUS_NONE
durumundan THERMAL_STATUS_LIGHT
durumuna kadar geçen sürenin t1 olarak ölçülmesi, cihaz üreticilerinin belirli kullanım durumları için azaltma stratejileri tasarlamasına ve test etmesine olanak tanır. Aşağıdaki tabloda termal durum kodlarını kullanmanın önerilen yolları özetlenmektedir:
Termal durum kodu | Açıklama ve önerilen kullanım |
---|---|
THERMAL_STATUS_NONE ( 0x00000000 ) | Kısma yok. THERMAL_STATUS_NONE ( 0 ) ile THERMAL_STATUS_LIGHT ( 1 ) arasındaki zaman periyodunun (t0 ila t1) başlangıcını tespit etmek gibi koruyucu eylemleri uygulamak için bu durumu kullanın. |
THERMAL_STATUS_LIGHT ( 0x00000001 ) | Hafif kısıtlama, UX etkilenmez. Bu aşama için cihaz azaltma işlemini yumuşak bir şekilde kullanın. Örneğin, yükseltmeyi veya verimsiz frekansları kullanmayı atlayın, ancak yalnızca büyük çekirdeklerde. |
THERMAL_STATUS_MODERATE ( 0x00000002 ) | Orta derecede kısıtlama, UX büyük ölçüde etkilenmez. Termal azaltma ön plan faaliyetlerini etkilediğinden uygulamaların gücü derhal azaltması gerekir. |
THERMAL_STATUS_SEVERE ( 0x00000003 ) | Şiddetli kısıtlama; UX büyük ölçüde etkilenir. Bu aşamada cihazın termal azaltımı sistem kapasitesini sınırlamalıdır. Bu durum, görüntü titremesi ve ses titremesi gibi yan etkilere neden olabilir. |
THERMAL_STATUS_CRITICAL ( 0x00000004 ) | Platform gücü azaltmak için her şeyi yaptı. Cihaz termal azaltma yazılımı, tüm bileşenleri en düşük kapasitede çalışacak şekilde yerleştirmiştir. |
THERMAL_STATUS_EMERGENCY ( 0x00000005 ) | Platformdaki önemli bileşenler termal koşullar nedeniyle kapanıyor ve cihazın işlevselliği sınırlı. Bu durum kodu, cihaz kapatılmadan önceki son uyarıyı temsil eder. Bu durumda modem ve hücresel veri gibi bazı işlevler tamamen kapatılır. |
THERMAL_STATUS_SHUTDOWN ( 0x00000006 ) | Derhal kapatın. Bu aşamanın ciddiyeti nedeniyle uygulamalar bu bildirimi alamayabilir. |
Cihaz üreticilerinin termal HAL için VTS testini geçmesi gerekir ve sıcaklık değişikliklerini simüle etmek için çekirdek sysfs arayüzünden emul_temp
kullanabilir.