studio programacion herramientas fundamentos con avanzado aplicaciones android multithreading service process

programacion - Comience un servicio en un proceso separado de Android



manual de android en pdf (2)

Ejecutar en un proceso separado no resolverá su problema. Tuve el mismo problema y este es un comportamiento normal de Android. Cuando inicia un servicio (no un servicio en primer plano), incluso si está en un proceso separado, el sistema operativo puede matarlo en cualquier momento. En su caso, si cierra las actividades / cancela la aplicación, el sistema operativo normalmente cierra el servicio incluso si están en proceso por separado. Tienes dos opciones:

1- Comience su servicio como un servicio en primer plano . En este caso, el servicio no se cerrará en casi ninguna condición. Tenga en cuenta que el servicio en primer plano está diseñado para aplicaciones específicas y tendrá una notificación fija en el centro de notificaciones y la barra de estado.

2- Haga su servicio como un servicio de inicio (no un servicio de atención). Luego, en el comando onStartCommand, devuelve START_STICKY. Esto le dirá al sistema operativo, si por alguna razón necesita cerrar el servicio, vuelva a ejecutarlo cuando tenga suficientes recursos. En su caso, cuando el usuario cierra la actividad / mata la aplicación, el proceso de servicio se eliminará de todos modos, sin embargo, normalmente se volverá a abrir.

Quiero comenzar un servicio en un proceso por separado (es decir, cuando voy a mi administrador de aplicaciones en la configuración y luego voy a ejecutar servicios, debe mostrar mi servicio en un proceso separado).

Mi manifiesto de Android es el siguiente:

<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.timerapp.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name="com.example.timerapp.WorkerThread" android:process="com.moizali"></service> </application>

Estoy comenzando el servicio en mi MainActivity así que, obviamente, cuando elimino la aplicación, el servicio se apaga también. ¿Alguien puede decirme cómo comenzar el servicio como un proceso diferente?


Consulte el atributo de process para el service en AndroidManifest.xml . Debes cambiar tu android:process valor de android:process para comenzar con a :

http://developer.android.com/guide/topics/manifest/service-element.html

La sección relevante:

Si el nombre asignado a este atributo comienza con dos puntos ('':''), se crea un nuevo proceso, privado para la aplicación, cuando es necesario y el servicio se ejecuta en ese proceso. Si el nombre del proceso comienza con un carácter en minúscula, el servicio se ejecutará en un proceso global de ese nombre, siempre que tenga permiso para hacerlo. Esto permite que los componentes en diferentes aplicaciones compartan un proceso, reduciendo el uso de recursos.

La otra respuesta proporcionada realmente no responde la pregunta de cómo iniciar un servicio en un proceso separado.

Definiendo un Proceso de un Servicio

El campo android:process define el nombre del proceso donde se ejecutará el servicio. Normalmente, todos los componentes de una aplicación se ejecutan en el proceso predeterminado creado para la aplicación. Sin embargo, un componente puede anular el predeterminado con su propio atributo de proceso, permitiéndole extender su aplicación a través de múltiples procesos.

Si el nombre asignado a este atributo comienza con dos puntos ('':''), el servicio se ejecutará en su propio proceso separado.

<service android:name="com.example.appName" android:process=":externalProcess" />

Si el nombre del proceso comienza con un carácter en minúscula, el servicio se ejecutará en un proceso global de ese nombre, siempre que tenga permiso para hacerlo. Esto permite que los componentes en diferentes aplicaciones compartan un proceso, reduciendo el uso de recursos.