Isı azaltma

Android çerçevesi sayesinde cihaz üreticileri ve uygulama geliştiriciler, 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ırlandırılır ve gerekirse çerçeve termal kapatma işlemi başlatılır. PowerManager sınıfında kayıtlı bir geri çağırma yoluyla termal stres bildirimleri alan uygulamalar, kullanıcı deneyimlerini sorunsuz bir şekilde ayarlayabilir.

Termal HAL

Android 9 ve önceki sürümlerde, sıcaklık okumalarını almak için Thermal HAL 1.0'da tanımlanan bir yoklama arayüzü kullanılır. Bu HAL, Android çerçevesinin ve 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üne özel sıklık sınırlama ve kapatma eşiklerini okumasına olanak tanıyordu.

Android 10, Android çerçevesinde bir termal sistem ve termal alt sistem donanım cihazlarına yönelik arayüzü soyutlayan yeni bir HAL sürümü olan Thermal HAL 2.0'ı kullanıma sundu. 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ığının belirtilen termal sınırlar içinde kalmasını sağlamak için izlenmesi gereken en önemli sistem, cihazın deri sıcaklığıdır.

Ayrıca Thermal HAL 2.0, termal sensör okumaları ve termal stresi gösteren ilişkili şiddet düzeyleri ile birden fazla istemci 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.

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 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, okunabilir bir hata mesajı gönderilir.

sayfalarına bakın.

Mevcut sıcaklıkları döndüren bir yoklama arayüzü olmasının yanı sıra, çerçevedeki termal hizmet gibi termal HAL istemcilerinden gelen geri çağırma arayüzüyle birlikte geri çağırma IThermalChangedCallback (HIDL, Android 10-13) veya IThermalChangedCallback (AIDL, Android 14 ve sonraki sürümler) kullanabilirsiniz. Örneğin, önem derecesi değişen olayları kaydetmek veya kaydını silmek için RegisterIThermalChangedCallback ve UnregisterIThermalChangedCallback. Belirli bir sensörün termal şiddeti değiştiyse, notifyThrottling, termal-event dinleyicilerine termal sınırlama etkinliği geri çağırma işlemi gönderir.

Termal sensör bilgilerine ek olarak, azaltılmış soğutma cihazlarının listesi getCurrentCoolingDevices içinde gösterilir. Bu listenin sırası, 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 başlıklı makaleyi inceleyin.

Kendi uzantılarınızı ekleyebilseniz de 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 sınırlama ş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. Birincisi dahili platform ve cihaz üreticisi kullanımı içindir, ikincisi ise Android uygulamaları içindir.

Geri çağırma arayüzleri aracılığıyla bir cihazın mevcut termal durumu, 0x00000000 (sınırlama yok) ile 0x00000006 (cihazı kapatma) arasında değişen bir tam sayı değeri olarak alınabilir. Yalnızca Android API veya cihaz üreticisi API'si gibi güvenilir bir sisteme ait hizmet, ayrıntılı termal sensör ve termal etkinlik bilgilerine erişebilir. Aşağıdaki şekilde, Android 10 ve sonraki sürümlerdeki termal azaltma süreci 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-13 sürümlerinde cihaz sıcaklık sensörü ve sınırlama durumunu bildirmek için cihaz üreticilerinin Thermal HAL 2.0'ın (IThermal.hal) HIDL yönünü uygulaması gerekir.

Android 14'te cihaz sıcaklık sensörü ve kısıtlama durumunu bildirmek için cihaz üreticilerinin Thermal HAL 2.0'ın AIDL yönünü (IThermal.aidl) uygulaması gerekir.

Pil gücü kısıtlamaları da dahil olmak üzere cihaz performansını kısıtlayan her şey termal HAL üzerinden bildirilmelidir. Bunun gerçekleşmesini sağlamak için, azaltma ihtiyacını gösterebilecek (durum değişikliklerine göre) tüm sensörleri termal HAL'ye yerleştirin ve alınan azaltma işlemlerinin önem derecesini bildirin. Sensör okumasından döndürülen sıcaklık değeri, ilgili önem derecesi eşiğini doğru şekilde yansıttığı sürece gerçek sıcaklık olmak zorunda değildir. Ö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 önem derecesi, söz konusu eşikte gereken önem derecesiyle eşleşmelidir. Örneğin, gerçek sıcaklık 65 °C olduğunda ve belirttiğiniz kritik önem derecesine karşılık geldiğinde kritik sıcaklık eşiğiniz olarak 72 °C 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 işlemleriyle ilişkisi hakkında daha fazla bilgi edinmek için Termal durum kodlarını kullanma başlıklı makaleyi inceleyin.

Termal API'leri kullanma

Uygulamalar, PowerManager sınıfı aracılığıyla işleyici ekleyip kaldırabilir ve termal durum bilgilerine erişebilir. IThermal arayüzü, termal durum değerlerini döndürme de dahil olmak üzere gereken tüm işlevleri sağlar. IThermal bağlayıcı arayüzü, uygulamaların termal durum dinleyicilerini kaydederken veya kaldırırken kullanabileceği OnThermalStatusChangedListener arayüzü olarak sarmalanır.

Android Thermal API'leri, uygulamaların PowerManager sınıfında tanımlanan durum kodları aracılığıyla termal önem düzeyleri hakkında bildirim alması için hem geri çağırma hem de yoklama yöntemlerine sahiptir. Yöntemler şunlardır:

Termal durum kodlarını kullanma

Isı durumu kodları, belirli sıklık sınırlama düzeylerine karşılık gelir. Bu düzeyleri, veri toplamak ve optimum bir kullanıcı deneyimi tasarlamak için kullanabilirsiniz. Örneğin, uygulamalar 0x00000000 (THERMAL_STATUS_NONE) durumu alabilir ve bu durum daha sonra 0x00000001 (THERMAL_STATUS_LIGHT) olarak değişebilir. 0x00000000 durumunu t0 olarak işaretlemek, ardından 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ına ve test etmesine olanak tanır. Aşağıdaki tabloda, termal durum kodlarını kullanmayla ilgili önerilen yöntemler özetlenmiştir:

Termal durum kodu Açıklama ve önerilen kullanım
THERMAL_STATUS_NONE (0x00000000) Kısıtlama yok. Bu durumu, THERMAL_STATUS_NONE (0) ile THERMAL_STATUS_LIGHT (1) arasındaki zaman aralığının başlangıcını (t0 ile t1) algılama gibi koruyucu işlemler uygulamak için kullanın.
THERMAL_STATUS_LIGHT (0x00000001) Hafif sınırlama, kullanıcı deneyimi etkilenmez. Bu aşamada cihazı nazikçe hafifletin. Örneğin, yalnızca büyük çekirdeklerde hızlandırmayı veya verimsiz frekansları atlayın.
THERMAL_STATUS_MODERATE (0x00000002) Sınırlama orta düzeydedir ve kullanıcı deneyimi büyük ölçüde etkilenmez. Isı azaltma, ön plandaki etkinlikleri etkilediğinden uygulamalar gücü hemen azaltmalıdır.
THERMAL_STATUS_SEVERE (0x00000003) Şiddetli kısıtlama; kullanıcı deneyimi büyük ölçüde etkilenir. Bu aşamada, cihazın ısınmasını azaltma özelliği sistem kapasitesini sınırlamalıdır. Bu durum, görüntüde duraklama ve ses dalgalanması 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ışacak şekilde yerleştirmiştir.
THERMAL_STATUS_EMERGENCY (0x00000005) Platformdaki temel bileşenler termal koşullar nedeniyle kapanıyor ve cihaz işlevselliği sınırlanıyor. Bu durum kodu, cihaz kapatılmadan önceki son uyarıyı gösterir. 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.