Android çerçevesi sayesinde cihaz üreticileri ve uygulama geliştiriciler, bir cihaz aşırı ısınmaya başladığında 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 sınırlanır ve gerekirse bir çerçeve termal kapatma işlemi başlatılır. PowerManager
sınıfında kayıtlı bir geri çağırma işlevi aracılığıyla termal stres bildirimleri alan uygulamalar, kullanıcı deneyimlerini sorunsuz bir şekilde ayarlayabilir.
Termal HAL
Android 9 ve önceki sürümler, sıcaklık ölçümlerini almak için Thermal HAL 1.0'da tanımlanan bir anket arayüzü kullanır. Bu HAL, Android çerçevesinin ve cihaz üreticisinin HAL'i gibi diğer güvenilir istemcilerin, aynı API üzerinden her sensörün mevcut sıcaklığını 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 arayüzü termal alt sistem donanım cihazlarıyla soyutlayan yeni HAL sürümü olan Thermal HAL 2.0'ı kullanıma sundu. Donanım arayüzü; cilt, pil, GPU, CPU ve USB bağlantı noktası için sıcaklık sensörleri ve termistörler içerir. Cihazın deri sıcaklığı, cihazın yüzey sıcaklığını belirlenen termal sınırlar dahilinde tutmak için izlenmesi gereken en önemli sistemdir.
Buna ek olarak, Thermal HAL 2.0 birden fazla müşteriye termal stresi göstermek için termal sensör okumaları ve ilişkili önem seviyeleri 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österilir.
Şekil 1. Aşırı ısınma uyarıları.
Mevcut sıcaklıklar, IThermal HAL aracılığıyla farklı termal sensör türleri için 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 işlem devam eder. FAILURE
döndürülürse status.debugMessage
adresine kullanıcı tarafından okunabilir bir hata mesajı gönderilir.
Mevcut sıcaklıkları döndüren bir anket arayüzü olmasının yanı sıra, termal HAL istemcilerinden gelen geri çağırma arayüzüyle (ör. çerçevenin termal hizmeti) geri çağırma IThermalChangedCallback
(HIDL, Android 10 ila 13) veya IThermalChangedCallback
(AIDL, Android 14 ve sonraki sürümler) kullanabilirsiniz. Örneğin, önem derecesi değişen etkinlikleri kaydetmek veya kaydını kaldırmak için RegisterIThermalChangedCallback
ve UnregisterIThermalChangedCallback
. Belirli bir sensörün termal ciddiyeti değişirse notifyThrottling
, termal-event dinleyicilerine termal kısıtlama etkinliği geri çağırma gönderir.
getCurrentCoolingDevices
, termal sensör bilgilerine ek olarak, azaltılmış soğutma cihazlarının bir listesini de gösterir. Bu listenin sırası, soğutma cihazı çevrimdışı olsa bile değişmez. Cihaz üreticileri, bu listeyi kullanarak statsd
metrikleri toplayabilir.
Daha fazla bilgi için Referans uygulama başlıklı makaleyi inceleyin.
Kendi uzantılarınızı ekleyebilirsiniz ancak termal azaltma işlevini devre dışı bırakmamalısınız.
Termal hizmet
Android 10 ve sonraki sürümlerde çerçevedeki termal hizmet, Thermal HAL 2.0'dan alınan çeşitli azaltma sinyallerini kullanarak sürekli izleme sağlar ve müşterilerine kısıtlama şiddeti geri bildirimi verir. Bu istemciler arasında dahili bileşenler ve Android uygulamaları bulunur. Hizmet, geri çağırma olarak sunulan iki bağlayıcı geri çağırma arayüzü (IThermalEventListener
ve IThermalStatusListener
) kullanır. Eski biçim, dahili platform ve cihaz üreticisi kullanımı içindir, ikincisi ise Android uygulamaları içindir.
Geri çağırma arayüzleri aracılığıyla cihazın mevcut termal durumu, 0x00000000
(kısıtlama yok) ile 0x00000006
(cihazı kapatma) arasında bir tam sayı olarak geri alınabilir. Yalnızca Android API veya cihaz üreticisi API gibi güvenilir bir sistem hizmeti, ayrıntılı termal sensöre ve termal etkinlik bilgilerine erişebilir. Aşağıdaki şekilde, Android 10 ve sonraki sürümlerdeki termal azaltma işlemi akışının bir modeli gösterilmektedir:
Şekil 2. Android 10 ve sonraki sürümlerde termal azaltma işlemi akışı.
Cihaz üreticisi yönergeleri
Android 10 ile 13 arasındaki sürümlerde cihaz sıcaklık sensörünü ve kısıtlama durumunu raporlamak için cihaz üreticilerinin Thermal 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 bildirmek isteyen cihaz üreticilerinin, Thermal HAL 2.0'ın (IThermal.aidl
) AIDL yönünü uygulaması gerekir.
Pil gücü kısıtlamaları da dahil olmak üzere cihaz performansını düşüren her şey, termal HAL aracılığıyla raporlanmalıdır. Bunun gerçekleşmesini sağlamak için, azaltma ihtiyacını (durum değişikliklerine göre) gösterebilecek tüm sensörleri termal HAL'e koyun ve yapılan azaltma işlemlerinin önem derecesini raporlayın. Bir sensör ölçümünden döndürülen sıcaklık değerinin, ilgili önem eşiğini doğru şekilde yansıtması koşuluyla gerçek sıcaklık olması gerekmez. Örneğin, gerçek sıcaklık eşiği değerleriniz yerine farklı sayısal değerler iletebilir veya histerezis sağlamak için eşik özelliklerine koruma bandı ekleyebilirsiniz. Ancak bu değere karşılık gelen ciddiyet, söz konusu eşikte gerekenle eşleşmelidir. Örneğin, gerçek sıcaklık 65 °C olduğunda kritik sıcaklık eşiğiniz olarak 72 °C döndürmeye karar verebilirsiniz. Bu değer, belirttiğiniz kritik önem derecesine karşılık gelir. En iyi termal çerçeve işlevi için önem düzeyi doğru olmalıdır.
Çerçevedeki eşik düzeyleri ve bunların azaltma işlemlerine nasıl karşılık geldiği hakkında daha fazla bilgi edinmek için Termal durum kodlarını kullanma bölümüne bakın.
Termal API'leri kullanma
Uygulamalar, dinleyici 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 gereken tüm işlevleri sağlar. IThermal bağlayıcı arayüzü, uygulamaların termal durum işleyicileri 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üzeyleri hakkında bilgilendirilmesi için hem geri çağırma hem de sorgu yöntemlerine sahiptir. Yöntemler şunlardır:
getCurrentThermalStatus()
, cihazda akış kısıtlaması yapılmadığı sürece cihazın mevcut termal durumunu tam sayı olarak döndürür.addThermalStatusListener()
dinleyici eklediğinderemoveThermalStatusListener()
, daha önce eklenen bir dinleyiciyi kaldırır.
Termal durum kodlarını kullanma
Termal durum kodları, veri toplamak ve optimum bir kullanıcı deneyimi tasarlamak için kullanabileceğiniz belirli açma/kapatma seviyelerine karşılık gelir. Örneğin, uygulamalar 0x00000000
(THERMAL_STATUS_NONE
) durumunu alabilir ve bu durum daha sonra 0x00000001
(THERMAL_STATUS_LIGHT
) olarak değişebilir. 0x00000000
durumunu t0 olarak işaretleyip THERMAL_STATUS_NONE
durumundan THERMAL_STATUS_LIGHT
durumuna geçen süreyi t1 olarak ölçmek, cihaz üreticilerinin belirli kullanım alanları için azaltma stratejileri tasarlamasını ve test etmesini sağlar. Aşağıdaki tabloda, termal durum kodlarının önerilen kullanım şekilleri özetlenmiştir:
Termal durum kodu | Açıklama ve önerilen kullanım |
---|---|
THERMAL_STATUS_NONE (0x00000000 ) |
Kısıtlama yoktur. THERMAL_STATUS_NONE (0 ) ile THERMAL_STATUS_LIGHT (1 ) arasındaki dönem başlangıcını (t0 ile t1) algılama gibi koruyucu işlemleri uygulamak için bu durumu kullanın. |
THERMAL_STATUS_LIGHT (0x00000001 ) |
Hafif tarama, kullanıcı deneyimi etkilenmez. Bu aşamada cihazı hafifçe azaltın. Örneğin, yalnızca büyük çekirdeklerde artırmayı veya verimsiz frekansları kullanmayı atlayın. |
THERMAL_STATUS_MODERATE (0x00000002 ) |
Orta düzeyde throttling, kullanıcı deneyimi çok fazla etkilenmez. Isı azaltma, ön plan etkinliklerini etkilediğinden uygulamalar güç kullanımını hemen azaltmalıdır. |
THERMAL_STATUS_SEVERE (0x00000003 ) |
Yoğun kısıtlama; kullanıcı deneyimi büyük ölçüde etkilenir. Bu aşamada, cihazın termal azaltma özelliği sistem kapasitesini sınırlamalıdır. Bu durum, ekranda takılma ve sesde titreme gibi yan etkilere neden olabilir. |
THERMAL_STATUS_CRITICAL (0x00000004 ) |
Platform, gücü azaltmak için her şeyi yaptı. Cihazın termal azaltma yazılımı, tüm bileşenleri en düşük kapasitelerinde çalıştıracak şekilde ayarladı. |
THERMAL_STATUS_EMERGENCY (0x00000005 ) |
Platformdaki temel bileşenler termal koşullar nedeniyle kapanıyor ve cihaz işlevi sınırlı. Bu durum kodu, cihaz kapanmadan ö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 ) |
Hemen kapatın. Bu aşamanın ciddiyeti nedeniyle uygulamalar bu bildirimi alamayabilir. |
Cihaz üreticileri, termal HAL için VTS testini geçmelidir ve sıcaklık değişikliklerini simüle etmek için çekirdek sysfs arayüzünden emul_temp
özelliğini kullanabilir.