* EDIT giải quyết bằng cách làm điều này: * tôi đã giải quyết nó bằng cách thay đổi của tôi onDestroy()
của Hoạt động của tôi và ServiceConnection::onServiceDisconnected()
.Không thể phá hủy hoạt động (dịch vụ không được đăng ký)
Tôi đã thêm boolean để kiểm tra xem tôi có bị ràng buộc với Dịch vụ được gọi là boundToService
hay không. Các 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;
}
};
Và onDestroy()
:
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.e(getPackageName(), "Destroying Activity");
if (boundToService && mConnection != null) {
doUnbindService();
}
}
Đây là cách ràng buộc và unbinding được thực hiện trong hoạt động:
public void doBindService() {
bindService(new Intent(this, EventService.class), mConnection,
Context.BIND_AUTO_CREATE);
boundToService = true;
}
public void doUnbindService() {
unbindService(mConnection);
boundToService = false;
}
Như Guillaume nói, gọi super.onDestroy()
đầu tiên là phải.
* END OF động SOLVE *
Tôi có một Foreground Service
rằng dữ liệu các cuộc thăm dò GPS, và MapActivity
yêu cầu rằng dữ liệu mỗi 3 giây. Khi onDestroy()
của MapActivity
được gọi, tôi nhận được lỗi LogCat này:
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: [email protected]
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: [email protected]
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`
Và tất nhiên các mã xung quanh dòng 175 nơi ngoại lệ được gây ra trong chương trình của tôi:
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
unbindService(mConnection);
super.onDestroy();
}
Nếu bạn muốn biết thêm đoạn mã, chỉ cần cho tôi biết.
* chỉnh sửa *
Đây là mã cho ServiceConnection:
public void doBindService() {
//ComponentName service = startService(new Intent(this,
// EventService.class));
bindService(new Intent(this, EventService.class), mConnection,
Context.BIND_AUTO_CREATE);
}
mConnection
là loại 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
}
};
Có thể dịch vụ đã bị hủy trước khi hoạt động bị hủy không? – SirPentor
Dịch vụ này sẽ bị hủy trước. – tolgap
Đó là vấn đề cốt lõi rồi. Làm thế nào là nó bị phá hủy? – SirPentor