gpt4 book ai didi

android - 服务泄露了最初绑定(bind)在这里的 ServiceConnection

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

我正在使用启动 IntentService 的 BraodCastReceiver。一切看起来都很好,但我收到这个错误,我不知道它的来源:

android.app.ServiceConnectionLeaked: Service     com.merchantech.app.smartdiscount.MyIntentService has leaked ServiceConnection  com.clover.sdk.v3.order.OrderConnector@535008f4 that was originally bound here
at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:969)
at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:863)
at android.app.ContextImpl.bindService(ContextImpl.java:1426)
at android.app.ContextImpl.bindService(ContextImpl.java:1415)
at android.content.ContextWrapper.bindService(ContextWrapper.java:473)
at com.clover.sdk.v1.ServiceConnector.connect(ServiceConnector.java:119)
at com.clover.sdk.v1.ServiceConnector.waitForConnection(ServiceConnector.java:148)
at com.clover.sdk.v1.ServiceConnector.execute(ServiceConnector.java:209)
at com.clover.sdk.v3.order.OrderConnector.getOrder(OrderConnector.java:153)
at com.merchantech.app.smartdiscount.MyIntentService.onHandleIntent(MyIntentService.java:41)
at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.os.HandlerThread.run(HandlerThread.java:60)

这是我的 BrodcastReceiver 类:

public class MyReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals("com.test.intent.action.LINE_ITEM_ADDED")) {
Intent i = new Intent(context, MyIntentService.class);
context.startService(i);
}
}
}

这是我的 IntentService 类:

public class MyIntentService extends IntentService {

public MyIntentService() {
super("MyIntentService");
}

@Override
protected void onHandleIntent(Intent intent) {
orderItem.addLineItem(orderId, lineItemId, var);
}
}

最佳答案

该错误消息基本上意味着某些组件创建了一个到 Service 的绑定(bind),并且在该组件被销毁之前没有从该服务解除绑定(bind)。

您需要提供有关应用结构的更多信息,以便更好地回答您的问题。我会做一些猜测,也许会给你一些关于要探索的东西的想法。

我猜您正在使用来自 Clover 的库,也许还有 Merchantech。或者 Clover 库可能使用 Merchantech 库。我还猜测 orderItem 是 Clover 定义的类的一个实例,而不是你。

Android 运行时在 onHandleIntent() 完成并且没有更多 Intent 请求排队后销毁 IntentService。您可以通过将 onDestroy() 方法添加到您的 MyIntentService 来确认这一点,并使用 Log 命令显示它何时被调用。这意味着在您为 onHandleIntent() 发布的代码中,您的 IntentService 将在 addLineItem() 调用完成后立即销毁。

堆栈跟踪表明调用 orderItem.addLineItem() 触发的处理导致绑定(bind)到另一个服务。在某个地方,该绑定(bind)没有得到适当的管理——可能在应该解除绑定(bind)的时候没有解除绑定(bind)。当您的组件(Service 或 Activity)被销毁时,Clover 子系统是否希望您“关闭”它或“释放”资源?

关于android - 服务泄露了最初绑定(bind)在这里的 ServiceConnection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31296480/

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