gpt4 book ai didi

android - 无法销毁 Activity (服务未注册)

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:38:52 26 4
gpt4 key购买 nike

*通过这样做解决了编辑问题:*我已经通过更改 Activity 的 onDestroy()ServiceConnection::onServiceDisconnected() 解决了这个问题。

我添加了一个 bool 值来检查我是否绑定(bind)到名为 boundToService 的服务。服务连接:

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;
}
};

还有 onDestroy():

@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.e(getPackageName(), "Destroying Activity");
if (boundToService && mConnection != null) {
doUnbindService();
}
}

这是在 Activity 中完成绑定(bind)和解除绑定(bind)的方式:

public void doBindService() {
bindService(new Intent(this, EventService.class), mConnection,
Context.BIND_AUTO_CREATE);
boundToService = true;
}

public void doUnbindService() {
unbindService(mConnection);
boundToService = false;
}

正如 Guillaume 所说,必须先调用 super.onDestroy()

*求解结束*

我有一个轮询 GPS 数据的前台服务MapActivity 每 3 秒请求一次该数据。当 MapActivityonDestroy() 被调用时,我得到这个 LogCat 错误:

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`

当然还有在我的程序中引起异常的第 175 行附近的代码:

@Override
protected void onDestroy() {
// TODO Auto-generated method stub
unbindService(mConnection);
super.onDestroy();
}

如果您需要更多代码 fragment ,请告诉我。

*编辑*

这是服务连接的代码:

public void doBindService() {
//ComponentName service = startService(new Intent(this,
// EventService.class));
bindService(new Intent(this, EventService.class), mConnection,
Context.BIND_AUTO_CREATE);
}

mConnection 是 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

}
};

最佳答案

这对我有用!只需从 getApplicationContext() 而不是“this”上下文调用函数 unbindService()。 (与绑定(bind)服务相同)

getApplicationContext().unbindService(mServiceConnection);

关于android - 无法销毁 Activity (服务未注册),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10986408/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com