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
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.
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.
non è il (servizio in processo separato) l'unico modo per impedire al servizio di chiamare il proprio onDestroy quando chiama un'attività distrutta ?? – EsmaeelQash
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
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
- 1. Trovare processi che utilizzano ALSA suono veloce
- 2. Processi paralleli che utilizzano semafori in C
- 3. Le app che utilizzano più processi condividono un'istanza Dalvik?
- 4. Come tracciare e prevenire il deadlock apparso in c3po che è in esecuzione in processi separati?
- 5. JPA con EJB con DAO e livelli di servizio separati
- 6. Come creare un'istanza di tipi di valore che utilizzano riflessione
- 7. SSLSocket Android che utilizzano certificati autofirmati
- 8. In che modo i programmi Android utilizzano NEON SIMD?
- 9. E 'possibile creare un servizio WinRT
- 10. Android: Creare un pulsante con forma di triangolo che utilizzano definizioni XML (disegnabili)
- 11. Come posso creare un intent Android che trasporta dati?
- 12. notifiche push che utilizzano Socket.IO e PHP
- 13. Servizio Android che controlla MediaPlayer
- 14. Android come posso attendere che un servizio sia effettivamente connesso?
- 15. Come creare un servizio Windows con parametri?
- 16. Come creare un servizio Singleton in Aurelia?
- 17. Come creare un'applicazione simile a Chrome in Delphi che esegue più processi all'interno di una finestra?
- 18. Android - interazione servizio e attività
- 19. Come creare un servizio nativo Android e utilizzare il raccoglitore per comunicare con esso?
- 20. Eventuali esperienze che utilizzano SharpDevelop per creare un'app ASP.NET MVC?
- 21. JSON.NET e matrici che utilizzano LINQ
- 22. Come eseguire il debug di due processi in Android?
- 23. Qual è il modo migliore per comunicare tra un servizio WCF e thread separati?
- 24. Servizio Android ucciso e variabili statiche
- 25. Proprietà di configurazione che utilizzano la stessa chiave per creare un array/elenco
- 26. KyotoCabinet e più processi?
- 27. Servizio WCF ospitato da IIS e query SQL che utilizzano l'autenticazione di Windows
- 28. È possibile creare un servizio Android che è in ascolto per la pressione dei tasti hardware?
- 29. Android: Come creare un lanciatore
- 30. Progetti che utilizzano py.test
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? –
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
Grazie, lo ha fatto – chris