Termal azaltma

Android çerçevesi sayesinde cihaz üreticileri ve uygulama geliştiricileri, bir cihazın aşırı ısınmaya başlaması durumunda 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 kısıtlanır ve gerekirse çerçeve termal kapatması başlatılır. PowerManager sınıfında kayıtlı bir geri arama aracılığıyla termal stres bildirimleri alan uygulamalar, kullanıcı deneyimlerini zarif bir şekilde ayarlayabilir.

Termal HAL

Android 9 ve daha düşük sürümler, sıcaklık ölçümlerini almak için Termal HAL 1.0'da tanımlanan bir yoklama arayüzünü kullanır. Bu HAL, Android çerçevesinin ve bir 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ü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 termal alt sistem donanım cihazlarının arayüzünü soyutlayan HAL'in yeni bir sürümü olan Thermal HAL 2.0'ı tanıttı. 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ığı, cihaz yüzey sıcaklığının belirlenen termal limitler dahilinde tutulması için takip edilmesi gereken en önemli sistemdir.

Ek olarak, Termal HAL 2.0, termal stresi belirtmek için birden fazla müşteriye termal sensör okumaları ve ilgili şiddet seviyelerini 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örüntülenir.

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

Şekil 1. Aşırı ısınma uyarıları.

IThermal HAL aracılığıyla farklı tipteki termal sensörler için mevcut sıcaklıklar 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 süreç devam eder. FAILURE döndürülürse, insan tarafından okunabilir olması gereken bir hata mesajı status.debugMessage gönderilir.

Geçerli sıcaklıkları döndüren bir yoklama arayüzü olmasının yanı sıra, IThermalChangedCallback (HIDL, Android 10'dan 13'e kadar) veya IThermalChangedCallback (AIDL, Android 14 ve üstü) çerçevenin istemcileri gibi termal HAL istemcilerinden geri çağırma arayüzüyle birlikte kullanabilirsiniz. termal servis. Örneğin, ciddiyeti değişen olayları kaydetmek veya kaydını silmek için RegisterIThermalChangedCallback ve UnregisterIThermalChangedCallback . Belirli bir sensörün termal ciddiyeti değiştiyse notifyThrottling , termal olay dinleyicilerine bir termal azaltma olayı geri çağrısı gönderir.

Termal sensör bilgilerine ek olarak, getCurrentCoolingDevices azaltılmış soğutma cihazlarının bir listesi gösterilir. Bu listenin sırası, bir soğutma cihazı çevrimdışı olsa bile kalıcıdır. Cihaz üreticileri statsd ölçümleri toplamak için listeyi kullanabilir.

Daha fazla bilgi için Referans uygulamasına bakın.

Kendi uzantılarınızı ekleyebilseniz de termal azaltma işlevini devre dışı bırakmamalısınız.

Termal servis

Android 10 ve üzeri sürümlerde, çerçevedeki termal hizmet, Thermal HAL 2.0'dan gelen çeşitli azaltma sinyallerini kullanarak sürekli izleme sağlar ve istemcilerine kısıtlama ciddiyeti geri bildirimi verir. Bu istemciler dahili bileşenleri ve Android uygulamalarını içerir. Hizmet, geri arama olarak kullanıma sunulan IThermalEventListener ve IThermalStatusListener adlı iki bağlayıcı geri çağırma arabirimini kullanır. İlki dahili platform ve cihaz üreticisinin kullanımı içindir, ikincisi ise Android uygulamaları içindir.

Geri arama arayüzleri aracılığıyla, bir cihazın mevcut termal durumu, 0x00000000 (kısma yok) ila 0x00000006 (cihaz kapatma) arasında değişen bir tamsayı değeri olarak alınabilir. Ayrıntılı termal sensör ve termal olay bilgilerine yalnızca Android API veya cihaz üreticisi API'si gibi güvenilir bir sistem hizmeti erişebilir. Aşağıdaki şekilde Android 10 ve sonraki sürümlerde termal azaltma süreci akışının bir modeli sağlanmaktadır:

Android 10 ve üzeri sürümlerde termal azaltma süreci akışı.

Şekil 2. Android 10 ve sonraki sürümlerde termal azaltma süreci akışı.

Cihaz üreticisi yönergeleri

Android 10'dan 13'e kadar cihaz sıcaklık sensörünü ve kısıtlama durumunu raporlamak için cihaz üreticilerinin Termal 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 raporlamak için cihaz üreticilerinin Termal HAL 2.0'ın ( IThermal.aidl ) AIDL özelliğini uygulaması gerekir.

Pil gücü kısıtlamaları da dahil olmak üzere cihaz performansını azaltan her şey termal HAL aracılığıyla rapor edilmelidir. Bunun gerçekleşmesini sağlamak için, azaltma ihtiyacını gösterebilecek (durum değişikliklerine bağlı olarak) tüm sensörleri termal HAL'ye yerleştirin ve gerçekleştirilen tüm azaltma eylemlerinin ciddiyetini bildirin. Bir sensör okumasından döndürülen sıcaklık değerinin, karşılık gelen şiddet eşiğini doğru bir şekilde yansıttığı sürece gerçek sıcaklık olması gerekmez. Örneğin, gerçek sıcaklık eşik değerleriniz yerine farklı sayısal değerler iletebilir veya histerezis sağlamak için eşik spesifikasyonlarına koruma bandı oluşturabilirsiniz. Ancak bu değere karşılık gelen önem derecesi, o eşikte ihtiyaç duyulan önemle eşleşmelidir. Örneğin, gerçek sıcaklık 65°C olduğunda ve belirttiğiniz kritik şiddete karşılık geldiğinde, kritik sıcaklık eşiğiniz olarak 72°C'yi geri 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 eylemlerine nasıl karşılık geldiği hakkında daha fazla bilgi edinmek için bkz . Termal durum kodlarını kullanma .

Termal API'leri kullanın

Uygulamalar, dinleyicileri 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 ihtiyaç duyulan tüm işlevleri sağlar. ITermal bağlayıcı arayüzü , uygulamaların termal durum dinleyicilerini 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üzeylerinden haberdar edilmesi için hem geri çağırma hem de yoklama yöntemlerine sahiptir. Yöntemler şunlardır:

Termal durum kodlarını kullanın

Termal durum kodları, veri toplamak ve optimum kullanıcı deneyimini tasarlamak için kullanabileceğiniz belirli kısıtlama düzeylerine dönüşür. Örneğin, uygulamalar 0x00000000 ( THERMAL_STATUS_NONE ) durumunu alabilir ve bu durum daha sonra 0x00000001 ( THERMAL_STATUS_LIGHT ) olarak değişebilir. 0x00000000 durumunun t0 olarak işaretlenmesi, ardından THERMAL_STATUS_NONE durumundan THERMAL_STATUS_LIGHT durumuna kadar geçen sürenin t1 olarak ölçülmesi, cihaz üreticilerinin belirli kullanım durumları için azaltma stratejileri tasarlamasına ve test etmesine olanak tanır. Aşağıdaki tabloda termal durum kodlarını kullanmanın önerilen yolları özetlenmektedir:

Termal durum kodu Açıklama ve önerilen kullanım
THERMAL_STATUS_NONE ( 0x00000000 ) Kısma yok. THERMAL_STATUS_NONE ( 0 ) ile THERMAL_STATUS_LIGHT ( 1 ) arasındaki zaman periyodunun (t0 ila t1) başlangıcını tespit etmek gibi koruyucu eylemleri uygulamak için bu durumu kullanın.
THERMAL_STATUS_LIGHT ( 0x00000001 ) Hafif kısıtlama, UX etkilenmez. Bu aşama için cihaz azaltma işlemini yumuşak bir şekilde kullanın. Örneğin, yükseltmeyi veya verimsiz frekansları kullanmayı atlayın, ancak yalnızca büyük çekirdeklerde.
THERMAL_STATUS_MODERATE ( 0x00000002 ) Orta derecede kısıtlama, UX büyük ölçüde etkilenmez. Termal azaltma ön plan faaliyetlerini etkilediğinden uygulamaların gücü derhal azaltması gerekir.
THERMAL_STATUS_SEVERE ( 0x00000003 ) Şiddetli kısıtlama; UX büyük ölçüde etkilenir. Bu aşamada cihazın termal azaltımı sistem kapasitesini sınırlamalıdır. Bu durum, görüntü titremesi ve ses titremesi 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 kapasitede çalışacak şekilde yerleştirmiştir.
THERMAL_STATUS_EMERGENCY ( 0x00000005 ) Platformdaki önemli bileşenler termal koşullar nedeniyle kapanıyor ve cihazın işlevselliği sınırlı. Bu durum kodu, cihaz kapatılmadan ö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 ) Derhal kapatın. Bu aşamanın ciddiyeti nedeniyle uygulamalar bu bildirimi alamayabilir.

Cihaz üreticilerinin termal HAL için VTS testini geçmesi gerekir ve sıcaklık değişikliklerini simüle etmek için çekirdek sysfs arayüzünden emul_temp kullanabilir.