Servizio condiviso Android?

Innanzitutto vorrei dire due cose. Il primo è, mi dispiace se questa domanda sia stata già chiusa, ho cercato domande simili intorno a questo argomento, ma non sono riuscito a trovare una soluzione. In secondo luogo mi dispiace per la lunga domanda e per favore mi faccia sapere di qualsiasi errore e sarò sicuro di apportre modifiche appropriate :).

Sono relativamente nuovo allo sviluppo di Android (circa 2 mesi), quindi per favore perdonami la mia ignoranza. La domanda che ho è riguardante il servizio android.

  • Ruota l'anteprima della telecamera in Ritratto Android OpenCV Camera
  • Android App non viene mostrata per gli utenti di Google Play Store
  • La connessione TLS con SSLSocket è lenta in Android OS
  • ACTION_BATTERY_LOW non viene licenziato dal manifesto?
  • Metodo http post che passa i valori nulli al server
  • L'aggiornamento prende i dati di una row eliminata
  • Il mio problema è il seguente, ho creato le seguenti 3 applicazioni:

    • Una libreria android che contiene un piccolo servizio di test ( myService ).
    • Un'applicazione ( TestApplicationOne ) che ha accesso alla libreria android.
    • Un'altra applicazione ( TestApplicationTwo ) che ha anche accesso alla libreria android.

    La mia soluzione attuale funziona come segue, TestApplicationOne fa riferimento alla libreria personalizzata e utilizza questa libreria per connettersi al servizio ( myService ) tramite il metodo bindService () . Al termine della connessione, l'applicazione si aggiunge ad una collezione di osservatori situati all'interno di myService . Ogni object in questa raccolta viene notificato each volta che il servizio deve trasmettere un messaggio.

    Quando correva, la soluzione di cui sopra sembrava funzionare bene. Tuttavia, ora ho un'altra applicazione ( TestApplicationTwo ) che vorrei anche utilizzare lo stesso servizio come quello sopra. L'implementazione di TestApplicationTwo è stata creata per le stesse operazioni / specifiche della prima applicazione ( TestApplicationOne ).

    Il problema che ho è che quando il servizio viene avviato in entrambe le applicazioni, l'altra applicazione non viene notificata a nessun evento.

    Ho cercato di implementare diversi approcci per risolvere questo problema. Come utilizzare il model Singleton per mantenere un'unica istanza, ma il problema sembra ancora esistere. La mia unica comprensione è che each volta che viene avviata un'applicazione, viene creata una nuova istanza della libreria. Così la biblioteca di riferimento in TestApplicationOne non è la stessa istanza della libreria citata in TestApplicationTwo e di conseguenza non viene notificata.

    C'è qualcuno con qualsiasi esperienza in questo numero? Oppure può pensare a qualsiasi soluzione ansible?

    Grazie in anticipo per qualsiasi aiuto, è molto apprezzato.

    Giovanni

  • ECCEZIONE FATAL: principale java.lang.NoClassDefFoundError: android.support.v7.internal.widget.TintManager
  • Come aggiungere AsyncTask in una HttpURLConnection?
  • Impostazione del colore di un object Paint nella visualizzazione personalizzata
  • Come aggiungere il classpath in un progetto Android Studio
  • Callback di browser e follia di stack di attività Android
  • Come kotlin rende setOnClickListener accetta le funzioni come parametro
  • 2 Solutions collect form web for “Servizio condiviso Android?”

    Il problema che ho è che quando il servizio viene avviato in entrambe le applicazioni, l'altra applicazione non viene notificata a nessun evento.

    Questo perchè hai due servizi. Proprio perché il servizio è confezionato in un progetto di libreria Android, non può causare magicamente due applicazioni distinte per utilizzare la stessa copia.

    Come utilizzare il model Singleton per mantenere un'unica istanza, ma il problema sembra ancora esistere.

    Entrambe le applicazioni sono in esecuzione in processi separati, con la propria copia privata del servizio.

    La mia unica comprensione è che each volta che viene avviata un'applicazione, viene creata una nuova istanza della libreria.

    Le biblioteche non hanno istanze. I progetti della libreria Android non sono DLL – sono più simili alle librerie statiche.

    Così la biblioteca di riferimento in TestApplicationOne non è la stessa istanza della libreria citata in TestApplicationTwo e di conseguenza non viene notificata.

    Più preciso, il servizio in TestApplicationOne è una copia separata del servizio dalla copia in TestApplicationTwo .

    Oppure può pensare a qualsiasi soluzione ansible?

    Non dispongono di due applicazioni separate.

    Oppure, ridisegnare le tue applicazioni in modo tale che solo uno abbia il servizio e l'altro utilizzi il servizio dalla prima app.

    Oppure, distriggersre il servizio nel manifesto in entrambe le applicazioni, esportto con un <intent-filter> stabile (ad esempio, con una string di azione personalizzata). La prima applicazione da installare / eseguire utilizza PackageManager per verificare se il servizio esiste (ad esempio, non è realmente la prima applicazione), visto che il servizio non esiste, consente la propria copia di quel servizio. Poi, la seconda app attraversa lo stesso process, vede che il servizio è già presente e utilizza la copia remota piuttosto che abilitare la propria.

    Né il secondo o il terzo sono molto facili, semplicemente perché i dati esistono solo in un'app (quella con il servizio). Di conseguenza, se l'applicazione viene disinstallata, l'altra applicazione viene avvitata, anche se accade che il codice di servizio sia disponibile come componente disabilitato. Se le applicazioni sono chiaramente descritte all'utente come avere una relazione primaria / secondaria (ad esempio, app e il suo plug-in), questo può funzionare – gli utenti sperano che non si aspetti che un plug-in funziona se l'applicazione non è presente, per esempio. Naturalmente, in questo caso, il plugin non avrebbe la propria copia del servizio in primo luogo, ma avrebbe sempre guardato l'app principale per questo.

    Non sono sicuro, ma penso che android:singleUser="true" del service tag potrebbe essere quello che stai cercando.

     If set to true, a single instance of this component will run for all users. [boolean] 

    Se questo non ti aiuta, puoi considerare una soluzione in cui invii Trasmissioni dal servizio per ognuno dei tuoi events e hai BroadcastRecievers nelle tue 2 applicazioni anziché accedere al servizio come un object …

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.