android android-wifi android-doze

Android 7.0(Nougat) Doze Mode detiene el servicio web



android-wifi android-doze (2)

Tengo un servicio de primer plano de Android con un bloqueo de WiFi que actúa como un servicio web para otro dispositivo local. Antes del modo Doze, obtener un bloqueo de WiFi y ser un servicio según las necesidades funcionó muy bien.

Incluso con las optimizaciones de la batería desactivadas para mi aplicación, el teléfono todavía está matando la aplicación cuando la pantalla se apaga durante unos minutos.

¿Cómo puedo alertar correctamente a Android de que un servicio solicitado explícitamente por el cliente se está realizando en primer plano, y no quieren que su teléfono entre en suspensión en este momento?

EDIT: este problema todavía existe en Android 8.0 (Oreo)


Intente utilizar el servicio de primer plano: https://developer.android.com/guide/components/services.html#Foreground

Un servicio en primer plano es un servicio que el usuario conoce activamente y no es un candidato para que el sistema se cierre cuando hay poca memoria. Un servicio en primer plano debe proporcionar una notificación para la barra de estado, que se coloca bajo el encabezado En curso. Esto significa que la notificación no se puede descartar a menos que el servicio se detenga o se elimine del primer plano.

También puede probar FULL_WAKE_LOCK o SCREEN_DIM_WAKE_LOCK y ver si evita que su dispositivo entre en modo de inactividad.refer - https://developer.android.com/reference/android/os/PowerManager.html#FULL_WAKE_LOCK


puede hacerlo de esta manera: al igual que llama a su servicio, puede agregar un código para mantener la pantalla activa. Esto evitará el bloqueo automático del teléfono. A continuación se muestra un fragmento de código de ejemplo de la documentación.

public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //keep screen awake getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); }

La ventaja de este enfoque es que, a diferencia de los bloqueos de activación, no requiere un permiso especial, y la plataforma administra correctamente el movimiento del usuario entre las aplicaciones, sin que la aplicación deba preocuparse por la liberación de recursos no utilizados. Además, puede usar el administrador de alarmas de una manera efectiva como se describe en esta answer SO: