Ho scritto una libreria che avvia un servizio in background. Funziona perfettamente in tutte le applicazioni.Come eseguire un servizio Singleton (condiviso) in una libreria per più applicazioni?
Per ridurre l'utilizzo della RAM, voglio evitare di eseguire più servizi per diverse applicazioni. In realtà, è abbastanza bello usare solo un servizio per fare le cose.
In primo luogo, ho scritto un file AIDL per rendere IPC tra applicazioni/librerie. Definito il servizio come esportato/abilitato con autorizzazione della firma. Dal momento che tutte le applicazioni sono esattamente lo stesso servizio, non è possibile controllare se uno è in alto o in basso. Durante il binding del servizio per verificare le condizioni del servizio, crea sempre e distrugge il proprio servizio a causa della natura del flag BIND_AUTO_CREATE. Ecco perché non è possibile ottenere alcun tipo di informazioni dal servizio esportato se è veramente attivo e funzionante.
Quindi, ho provato a definire un provider di contenuti sul manifest della libreria. Il mio obiettivo è condividere le informazioni del servizio attraverso di esso. È davvero un buon meccanismo per comunicare tra il servizio esportato e il processo principale dell'applicazione. Ma non è utilizzabile per più istanze. Perché le applicazioni che ottengono le informazioni del fornitore di contenuti dalla libreria usano la stessa autorità e quindi non è possibile installare la seconda. Fornisce un errore DUPLICATE_PROVIDER_AUTHORITY.
Qual è il tuo suggerimento in merito al problema? C'è qualche opzione per creare un meccanismo master/slave? È possibile rendere il servizio singleton per l'applicazione utilizza il progetto della libreria?
P.S: tecniche di trasmissione condivise e preferenze condivise. Ma non sono efficaci per ascoltare la richiamata dal servizio esportato.
saresti in grado di condividere la soluzione che hai trovato per favore? Anche se non era l'ideale per quello che volevi .... Hai detto in un commento "Ho completato la mia implementazione con i ricevitori di trasmissione (usando il permesso di firma)". Sarebbe interessante vedere come hai gestito questo. – brandall