Para evitar que se agote la batería, un dispositivo Android que está inactivo se cae rápidamente dormido. Sin embargo, hay momentos en que una aplicación necesita activar la pantalla o la CPU y la mantiene activa para completar el trabajo.
El enfoque que elijas dependerá de las necesidades de tu app. Sin embargo, una regla general general es que debes usar el enfoque más ligero posible para tu para minimizar el impacto de tu app en los recursos del sistema. Las siguientes secciones describir cómo abordar los casos en los que el comportamiento de suspensión predeterminado del dispositivo es incompatible con los requisitos de tu aplicación.
Alternativas al uso de bloqueos de activación
Antes de agregar compatibilidad con los bloqueos de activación a tu app, considera si su uso los casos admiten una de las siguientes soluciones alternativas:
Si tu aplicación realiza descargas HTTP prolongadas, considera usar
DownloadManager
Si tu app sincroniza datos desde un servidor externo, considera crear un adaptador de sincronización.
Si tu app depende de servicios en segundo plano, considera usar JobScheduler o Firebase Cloud Messaging activar estos servicios a intervalos específicos.
Si necesitas que tu aplicación complementaria siga ejecutándose cuando un dispositivo complementario usa el Administrador de dispositivo complementario.
Cómo mantener encendida la pantalla
Ciertas apps necesitan mantener la pantalla encendida, como las apps de juegos o de cine. El
la mejor manera de hacerlo
FLAG_KEEP_SCREEN_ON
en tu actividad (y solo en una actividad; nunca en un servicio u otra app
(componente de seguridad). Por ejemplo:
Kotlin
class MainActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) } }
Java
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } }
La ventaja de este enfoque es que, a diferencia de los bloqueos de activación, que se analizan en Cómo mantener CPU On), no se requiere un permiso especial, y la plataforma administra de forma correcta el movimiento del usuario entre aplicaciones, sin que esta necesite preocuparse por liberar recursos sin usar.
Otra forma de implementar esto es en el archivo XML de diseño de tu aplicación, usando
El atributo android:keepScreenOn
:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:keepScreenOn="true"> ... </RelativeLayout>
El uso de android:keepScreenOn="true"
equivale a usar
FLAG_KEEP_SCREEN_ON
Puedes usar el enfoque que mejor se adapte a tu app. La ventaja de establecer
la marca de forma programática en tu actividad es que te da la opción de
eliminar de manera programática la marca más tarde y así permitir que la pantalla gire
desactivado.
Modo ambiente para TV
En la TV,
FLAG_KEEP_SCREEN_ON
para evitar que el dispositivo ingrese
Modo ambiente
durante la reproducción de video activa. Cuando no se establece FLAG_KEEP_SCREEN_ON
debido a la actividad en primer plano, el dispositivo ingresará automáticamente al Modo ambiente
tras un período de inactividad.
Cómo mantener encendida la CPU
Si necesitas mantener la CPU en ejecución para completar algunos trabajos
cuando un dispositivo se suspende, puedes usar
Función del servicio del sistema PowerManager
llamados bloqueos de activación. Los bloqueos de activación permiten que tu app controle el estado de energía
del dispositivo host.
Crear y mantener bloqueos de activación puede tener
un impacto significativo en la conexión del dispositivo
la duración de batería. Por lo tanto, debes usar los bloqueos de activación solo cuando sea estrictamente necesario y
el menor tiempo posible. Por ejemplo, nunca deberías necesitar
usar un bloqueo de activación en una actividad. Como se describió anteriormente, si deseas mantener la
pantalla en tu actividad, usa
FLAG_KEEP_SCREEN_ON
Un caso legítimo para usar un bloqueo de activación podría ser un servicio en segundo plano necesita un bloqueo de activación para mantener la CPU en ejecución y poder realizar el trabajo mientras la pantalla está apagada. desactivado. Sin embargo, esta práctica debería minimizarse debido a su impacto en la duración de batería.
Para usar un bloqueo de activación, el primer paso es agregar el
permiso WAKE_LOCK
para
el archivo de manifiesto de tu aplicación:
<uses-permission android:name="android.permission.WAKE_LOCK" />
Si tu app incluye un receptor de emisión que usa un servicio A continuación, te mostramos cómo establecer un bloqueo de activación directamente:
Kotlin
val wakeLock: PowerManager.WakeLock = (getSystemService(Context.POWER_SERVICE) as PowerManager).run { newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyApp::MyWakelockTag").apply { acquire() } }
Java
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE); WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyApp::MyWakelockTag"); wakeLock.acquire();
Para retirar el bloqueo de activación, llama
wakelock.release()
De esta manera, se retira tu reclamación de la CPU. Es importante abrir un bloqueo de activación
tan pronto como la app termine de usarlo, para evitar que se agote la batería.