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çevesine bir termal sistem ve HAL'ın yeni bir sürümü olan Termal HAL 2.0'ı getirdi. Bu sürüm, termal alt sistem donanım cihazlarıyla arayüzü soyutlar. 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 yüzey sıcaklığını belirtilen termal sınırlar içinde tutmak için izlenecek en önemli sistem cihaz yüzey sıcaklığıdır.
Ayrıca Termal HAL 2.0, termal stresi belirtmek için birden fazla müşteriye termal sensör ölçümleri ve ilişkili önem düzeyleri sağlar. Aşağıdaki resimde, Android sistem kullanıcı arayüzündeki 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
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 etkinlik 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ı, bir soğutma cihazı çevrimdışı olsa bile değişmez. Cihaz üreticileri, statsd
metriklerini toplamak için bu listeyi kullanabilir.
Daha fazla bilgi için Referans uygulama bölümüne bakın.
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'daki çeşitli azaltma sinyallerini kullanarak sürekli izleme sağlar ve istemcilerine kısıtlama önem derecesi 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. İlki, dahili platform ve cihaz üreticisi kullanımı için, ikincisi ise Android uygulamaları içindir.
Geri çağırma arayüzleri aracılığıyla, bir cihazın mevcut termal durumu 0x00000000
(daraltma yok) ile 0x00000006
(cihaz kapatma) arasında değişen bir tam sayı değeri olarak alınabilir. Ayrıntılı termal sensör ve termal etkinlik bilgilerine yalnızca Android API veya cihaz üreticisi API gibi güvenilir bir sistem hizmeti erişebilir. Aşağıdaki şekilde, Android 10 ve sonraki sürümlerde termal azaltma işlemi akışının bir modeli verilmiştir:
Ş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 bildirmek için cihaz üreticilerinin Thermal HAL 2.0'ın (IThermal.hal
) HIDL yönünü 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 spesifikasyonlarına 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 seviyeleri 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 başlıklı makaleyi inceleyin.
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ğerlerini döndürmek de dahil olmak üzere gereken tüm işlevleri sağlar. Isıtma bağlayıcı arayüzü, uygulamaların termal durum dinleyicilerini kaydederken veya kaldırırken kullanabileceği OnThermalStatusChangedListener
arayüzü olarak sarmalanı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 ) |
Sınırlama 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 tarama hızı sınırlaması, 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 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ın kapanmasından ö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 kernel sysfs arayüzünden emul_temp
kullanabilir.