Isı azaltma

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.

Aşırı ısınma uyarıları.

Ş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.

dosyalarına bakın.

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:

Android 10 ve sonraki sürümlerde termal azaltma işlemi akışı.

Ş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:

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.