Nicht in der Lage zu zerstören Aktivität (service ist nicht registriert)
*BEARBEITEN GELÖST, DIES ZU TUN:*
Ich habe es gelöst, indem Sie meinen onDestroy()
meiner Tätigkeit und die ServiceConnection::onServiceDisconnected()
.
Ich habe eine boolean zu überprüfen, ob ich bin begrenzt, um den Dienst namens boundToService
.
Die ServiceConnection:
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
myService = ((EventService.MyBinder) service).getService();
}
public void onServiceDisconnected(ComponentName name) {
//TODO Auto-generated method stub
Log.i(getPackageName(), "ServiceConnection::onServiceDisconnected() called");
boundToService = false;
}
};
Und die onDestroy()
:
@Override
protected void onDestroy() {
//TODO Auto-generated method stub
super.onDestroy();
Log.e(getPackageName(), "Destroying Activity");
if (boundToService && mConnection != null) {
doUnbindService();
}
}
Dies ist, wie die verbindlich und unverbindlich erfolgt in der Aktivität:
public void doBindService() {
bindService(new Intent(this, EventService.class), mConnection,
Context.BIND_AUTO_CREATE);
boundToService = true;
}
public void doUnbindService() {
unbindService(mConnection);
boundToService = false;
}
Als Guillaume sagte, ruft super.onDestroy()
erste ist ein muss.
*ENDE LÖSEN*
Ich habe eine Foreground Service
Abstimmungen GPS-Daten, und die MapActivity
fordert, dass die Daten alle 3 Sekunden. Wenn die onDestroy()
des MapActivity
aufgerufen wird, bekomme ich die LogCat Fehler:
06-11 21:26:35.591: D/CLIPBOARD(14801): Hide Clipboard dialog at Starting input: finished by someone else... !
06-11 21:26:44.451: D/dalvikvm(14801): Debugger has detached; object registry had 1371 entries
06-11 21:26:44.451: D/AndroidRuntime(14801): Shutting down VM
06-11 21:26:44.456: W/dalvikvm(14801): threadid=1: thread exiting with uncaught exception (group=0x40c4b1f8)
06-11 21:26:44.476: E/AndroidRuntime(14801): FATAL EXCEPTION: main
06-11 21:26:44.476: E/AndroidRuntime(14801): java.lang.RuntimeException: Unable to destroy activity {com.project4.mtl/com.project4.mtl.EventActivity}: java.lang.IllegalArgumentException: Service not registered: com.project4.mtl.EventActivity$1@416179d8
06-11 21:26:44.476: E/AndroidRuntime(14801): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3124)
06-11 21:26:44.476: E/AndroidRuntime(14801): at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3142)
06-11 21:26:44.476: E/AndroidRuntime(14801): at android.app.ActivityThread.access$1200(ActivityThread.java:127)
06-11 21:26:44.476: E/AndroidRuntime(14801): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1192)
06-11 21:26:44.476: E/AndroidRuntime(14801): at android.os.Handler.dispatchMessage(Handler.java:99)
06-11 21:26:44.476: E/AndroidRuntime(14801): at android.os.Looper.loop(Looper.java:137)
06-11 21:26:44.476: E/AndroidRuntime(14801): at android.app.ActivityThread.main(ActivityThread.java:4507)
06-11 21:26:44.476: E/AndroidRuntime(14801): at java.lang.reflect.Method.invokeNative(Native Method)
06-11 21:26:44.476: E/AndroidRuntime(14801): at java.lang.reflect.Method.invoke(Method.java:511)
06-11 21:26:44.476: E/AndroidRuntime(14801): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
06-11 21:26:44.476: E/AndroidRuntime(14801): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
06-11 21:26:44.476: E/AndroidRuntime(14801): at dalvik.system.NativeStart.main(Native Method)
06-11 21:26:44.476: E/AndroidRuntime(14801): Caused by: java.lang.IllegalArgumentException: Service not registered: com.project4.mtl.EventActivity$1@416179d8
06-11 21:26:44.476: E/AndroidRuntime(14801): at android.app.LoadedApk.forgetServiceDispatcher(LoadedApk.java:888)
06-11 21:26:44.476: E/AndroidRuntime(14801): at android.app.ContextImpl.unbindService(ContextImpl.java:1211)
06-11 21:26:44.476: E/AndroidRuntime(14801): at android.content.ContextWrapper.unbindService(ContextWrapper.java:375)
06-11 21:26:44.476: E/AndroidRuntime(14801): at com.project4.mtl.EventActivity.onDestroy(EventActivity.java:175)
06-11 21:26:44.476: E/AndroidRuntime(14801): at android.app.Activity.performDestroy(Activity.java:4629)
06-11 21:26:44.476: E/AndroidRuntime(14801): at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1082)
06-11 21:26:44.476: E/AndroidRuntime(14801): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3111)
06-11 21:26:44.476: E/AndroidRuntime(14801): ... 11 more`
Und natürlich den code um die Zeile 175, wo die Ausnahme wird verursacht, in meinem Programm:
@Override
protected void onDestroy() {
//TODO Auto-generated method stub
unbindService(mConnection);
super.onDestroy();
}
Wenn Sie wollen mehr code snippets, nur mir sagen.
*Bearbeiten*
Dies ist der code für die ServiceConnection:
public void doBindService() {
//ComponentName service = startService(new Intent(this,
// EventService.class));
bindService(new Intent(this, EventService.class), mConnection,
Context.BIND_AUTO_CREATE);
}
mConnection
ist Typ ServiceConnection:
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
myService = ((EventService.MyBinder) service).getService();
}
public void onServiceDisconnected(ComponentName name) {
//TODO Auto-generated method stub
}
};
- Ist es möglich, dass der Dienst vernichtet werden, bevor die activity zerstört wird?
- Der Dienst wird zerstört Erster.
- Das ist das Kern-problem, dann. Wie wird es zerstört?
- void onDestroy() { // TODO Auto-generated method stub-Protokoll.e(getPackageName(), "Zerstören Service"); super.onDestroy(); locationManager.removeUpdates(this); if(notificationManager!=null){ notificationManager.cancelAll(); } stopForeground(true); }
- Ich denke, das erste, was Sie tun müssen, ist die Funktion
super.onDestroy();
vor Bindung die service. - Guillaume, Tat ich das, aber es ist immer noch das gleiche.
- Ich denke, Sie müssen etwas tun, auf ServiceConnection::onServiceDisconnected. Ich brauchen würde, um zu sehen, mehr code, um herauszufinden, was genau, aber das ist ein guter Ausgangspunkt für Sie.
- Gelöst Jungs. Es ist in der edit. Danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dass ist für mich gearbeitet ! Rufen Sie einfach die Funktion unbindService() von getApplicationContext() anstelle von "this" - Kontext. (gleich für die Bindung des Dienstes)
getApplicationContext()
?Könnte man nur festlegen
mService
zu null inonServiceDisconnected
und überprüfen Sie, dass inonDestroy
. Wie diese:onDestroy:
Funktioniert einwandfrei.