Ich habe einen Dienst in Android, der ein Framework einkapselt, das über eine start
-Methode verfügt. Der Service läuft darauf hinaus, so etwas wie diese, viele Dinge weggelassen:Binden und Starten eines Dienstes beim Starten der Anwendung
public class MyService extends Service {
private IBinder thisBinder;
public MyService(){
thisBinder = new LocalBinder();
}
@Override
public IBinder onBind(Intent intent) {
return thisBinder;
}
public void start(Map<String, Object> options)
{
getDriverManager().start(options);
}
}
ich auch eine Brücke Klasse, die Anrufe zum Service macht:
public class MyServiceBridge implements ServiceConnection {
private boolean started = false;
private boolean bound = false;
private MyService myService;
public MyServiceBridge(Context context){
this.context = context;
}
public void bindService(){
Intent intent = new Intent(getContext(), MyService.class);
getContext().bindService(intent, this, getContext().BIND_AUTO_CREATE);
getContext().startService(intent);
}
// Here's a sample call, and the one that is relevant
public void start(Map<String, Object> options){
setOptions(options);
if(bound == true){
getMyService().start(options);
}
else{
started = true;
}
}
}
ich die start
Methode Brücke nennen, um zu laufen der Service. Dies funktioniert gut, außer in dieser speziellen Situation (bisher). Die MyApplication
Klasse ruft die Startmethode der Brücke auf onCreate
:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
getServiceBridge().start(null);
}
}
Dies wird according to the docs „aufgerufen, wenn die Anwendung gestartet wird, bevor irgendwelche Aktivitäten, Service oder Empfängerobjekten (ohne Content-Provider) erstellt wurden.“. Tatsächlich scheint es so zu sein, weil der Dienst nicht startet und stattdessen startet, wenn ich die App schließe (zumindest ungerade). Das funktioniert, wenn ich den Anruf an die Methode onCreate
einer Aktivität verschiebe, aber das ist nicht ideal, weil ich den Dienst auch beenden kann und möchte, dass der Dienst für die gesamte Lebensdauer der App ausgeführt wird. Das heißt, der Dienst sollte starten, wenn die App gestartet wird, und anhalten, wenn die App beendet wird. Macht das Sinn? Gibt es einen anderen Weg, dies zu tun?
'onCreate' Methode wird aufgerufen oder nicht von Application-Klasse? –
Ja, die Methode wird aufgerufen! Diese und @ vanste25s Antwort hat mir jedoch klar gemacht, dass es etwas damit zu tun haben könnte, dass der Dienst immer noch im Hintergrund läuft. Ich sage das, weil die Methode beim zweiten Aufruf der App scheinbar nicht aufgerufen wird. –