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 görevlerin sıklığı azaltılır ve gerekirse çerçeve termal kapatma işlemi başlatılır.jobscheduler PowerManager sınıfındaki 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 değerlerini 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, birden fazla istemciye termal sensör okumaları ve termal stresi gösteren ilişkili şiddet düzeyleri 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ı.

1. şekil. 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, geri çağırma IThermalChangedCallback (HIDL, Android 10-13) veya IThermalChangedCallback (AIDL, Android 14 ve sonraki sürümler) ile çerçevedeki termal hizmet gibi termal HAL istemcilerinden gelen geri çağırma arayüzünü kullanabilirsiniz. Örneğin, önem derecesi değiştirilmiş etkinlikleri 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, getCurrentCoolingDevices içinde soğutma cihazlarının azaltılmış bir listesi 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 servis

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ı, ikincisi ise Android uygulamaları içindir.

Geri çağırma arayüzleri aracılığıyla, bir cihazın mevcut termal durumu 0x00000000 (kısıtlama 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 sistem hizmeti, 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.

Cihaz üreticileri, Android 14'te cihaz sıcaklık sensörü ve sınırlama durumunu bildirmek için Thermal HAL 2.0'ın AIDL yönünü (IThermal.aidl) uygulamalıdır.

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 tüm sensörleri (durum değişikliklerine göre) 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 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 dinleyici 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. OnThermalStatusChangedListener arayüzü olarak sarmalanan IThermal bağlayıcı arayüzü, uygulamalar tarafından termal durum dinleyicilerini kaydederken veya kaldırırken kullanılabilir.

Android termal 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ınırlama seviyelerine karşılık gelir. Bu seviyeleri veri toplamak ve optimum 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şaretleyip THERMAL_STATUS_NONE durumundan THERMAL_STATUS_LIGHT durumuna geçiş için geçen süreyi t1 olarak ölçmek, cihaz üreticilerinin belirli kullanım alanlarına yönelik azaltma stratejileri tasarlamasına ve test etmesine olanak tanır. Aşağıdaki tabloda, termal durum kodlarını kullanmayla ilgili öneriler ö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ı kullanmayı 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) Ciddi sıklık sınırlaması uygulanıyor. Kullanıcı deneyimi büyük ölçüde etkileniyor. Bu aşamada, cihazın ısınmasını azaltma özelliği sistem kapasitesini sınırlamalıdır. Bu durum, görüntüde titreme ve ses titremesi 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 değerini kullanabilir.