¿Qué es startActivity en un entorno sin actividad?
Puede startActivity directamente en Activity, si no en Activity, debe usar context.startActivity.
¿Es esa la forma de utilizar context.startActivity o startActivity del entorno de no actividad?
La respuesta no es necesariamente.
Si el contexto es Actividad, context.startActivity es el entorno de actividad startActivity;
Si el contexto no es Actividad, context.startActivity no es el entorno de Actividad startActivity;
Porque excepto Activty es una subclase de contexto.
El servicio y la aplicación también son subclases de contexto. Si el contexto de context.startActivity es Servicio o Aplicación, pertenece al entorno startActivity que no es de actividad.
En este momento recibirá un error:
Causado por: android.util.AndroidRuntimeException: llamar a startActivity () desde fuera de un contexto de actividad requiere la marca FLAG_ACTIVITY_NEW_TASK. ¿Es esto realmente lo que quieres?
Esto significa que en el entorno startActivity sin actividad, debe agregar FLAG_ACTIVITY_NEW_TASK:
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
Entonces puedes agregar Intent.FLAG_ACTIVITY_NEW_TASK.
Además, en Android7.0 y Android8.0, incluso si no se agrega Intent.FLAG_ACTIVITY_NEW_TASK, startActivity no informará un error en un entorno sin actividad, porque esto es un error, y luego Google corrigió este error en Android9.0 .
para resumir
Android 6.0 y anteriores y Android 9.0 y posteriores, entorno sin actividad startActivity, Intent.FLAG_ACTIVITY_NEW_TASK debe agregarse; de lo contrario, se informará un error;
Android7.0 y Android8.0, debido a un error, no informará un error sin agregar Intent.FLAG_ACTIVITY_NEW_TASK.
En general, siempre que el entorno que no sea de Actividad startActivity, agregar Intent.FLAG_ACTIVITY_NEW_TASK definitivamente no es un problema.