2012-02-26 5 views
14

Ho un'app Android che consiste in un'attività e un servizio. Attualmente esistono entrambi nello stesso processo e usano lo stesso heap ma voglio separare processo/heap per il servizio. Vale a dire. Voglio che il servizio sia completamente indipendente dall'attività, in modo che se l'attività si interrompe non influirà sul servizio. Tuttavia, desidero che siano installabili come una singola applicazione. È possibile?Come creare un'attività e un servizio Android che utilizzano processi separati

risposta

22

Definitivamente possibile. Vedere l'attributo process per service in AndroidManifest.xml

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

Per citare:

Il nome del processo in cui il servizio è quello di eseguire. Normalmente, tutti i componenti di un'applicazione vengono eseguiti nel processo predefinito creato per l'applicazione. Ha lo stesso nome del pacchetto dell'applicazione. L'attributo del processo dell'elemento può impostare un valore predefinito diverso per tutti i componenti. Ma il componente può sovrascrivere il valore predefinito con il proprio attributo di processo, consentendo di distribuire l'applicazione su più processi.

Se il nome assegnato a questo attributo inizia con due punti (':'), viene creato un nuovo processo, privato dell'applicazione, quando è necessario e il servizio viene eseguito in tale processo. Se il nome del processo inizia con un carattere minuscolo, il servizio verrà eseguito in un processo globale con quel nome, a condizione che abbia il permesso di farlo. Ciò consente ai componenti di diverse applicazioni di condividere un processo, riducendo l'utilizzo delle risorse.

+0

Bello. @lyricsboy ma una domanda: nello scenario dell'OP, quando Android uccide l'attività (da cui l'app), avrà anche ucciso il servizio in esecuzione se si trova sullo stesso processo? –

+0

Dipende da come viene avviato il servizio (quale modalità) e da altri fattori relativi alla memoria. Puoi trovare ulteriori informazioni su: http://developer.android.com/guide/topics/fundamentals/processes-and-threads.html – lyricsboy

+0

Grazie, lo ha fatto – chris

5

IPC per i servizi è IMHO richiesto solo se il servizio deve essere utilizzato da altre applicazioni.

L'esecuzione di un servizio nel proprio processo presenta i piccoli vantaggi che il garbage collector per il servizio non influisce sull'applicazione e che il footprint di memoria del servizio è leggermente più piccolo se viene eseguito da solo.

Se il consumo del servizio da parte di altre applicazioni non è un requisito per te, preferisci un servizio locale. In alternativa, puoi ancora eseguire il servizio nel proprio processo e utilizzare diverse comunicazioni con la tua applicazione, ad es. tramite un ricevitore broadcast. Ho provato a descrivere i diversi approcci nel mio tutorial del servizio Android al seguente link: Activity and service communication.

+0

non è il (servizio in processo separato) l'unico modo per impedire al servizio di chiamare il proprio onDestroy quando chiama un'attività distrutta ?? – EsmaeelQash

+0

Ciao Vogella, puoi spiegarmi qualsiasi scenerio in cui ci sia "consumo del servizio da parte di altre applicazioni", non sto ottenendo questo termine. grazie – SRam

+0

L'esecuzione di un servizio in un processo separato garantisce che, in caso di interruzione del processo dell'app principale, il servizio possa continuare. Quindi questo è abbastanza utile. – Luca

Problemi correlati