gpt4 book ai didi

Android 绑定(bind)服务不工作

转载 作者:搜寻专家 更新时间:2023-11-01 08:07:00 25 4
gpt4 key购买 nike

我在使用 bindService() 时遇到问题。我正在尝试在构造函数中进行绑定(bind),提供一个包含两个可解析的额外内容的 Intent。构造函数在 onResume() 中被调用,服务在其 onBind() 方法中解析这两个 extra 并可能返回 null 作为解析的结果。

当我第一次运行应用程序(通过 Eclipse 中的运行)时,绑定(bind)被(预期)服务拒绝:服务的 onBind() 方法被调用并返回 null。但是,bindService() 方法在应用程序端返回 true(不应该,因为绑定(bind)没有通过!)。

当我尝试以下操作时,问题变得更加严重:我按下主页按钮并再次启动应用程序(因此它的 onResume() 再次运行并且应用程序尝试再次绑定(bind)到服务)。这次服务的 onBind() 似乎甚至没有运行!但是应用程序的 bindService() 仍然返回 true!

下面是一些示例代码,可以帮助您理解我的问题。

应用端:

// activity's onResume()
@Override
public void onResume() {
super.onResume();
var = new Constructor(this);
}

// the constructor
public Constructor(Context context) {
final Intent bindIntent = new Intent("test");

bindIntent.putExtra("extra1",extra_A);
bindIntent.putExtra("extra2",extra_B);

isBound = context.bindService(bindIntent, connection, Context.BIND_ADJUST_WITH_ACTIVITY);

log("tried to bind... isBound="+isBound);
}

服务端:

private MyAIDLService service = null;   

@Override
public void onCreate() {
service = new MyAIDLService(getContentResolver());
}

@Override
public IBinder onBind(final Intent intent) {
log("onBind() called");

if (intent.getAction().equals("test") {
ExtraObj extra_A = intent.getParcelableExtra("extra1");
ExtraObj extra_B = intent.getParcelableExtra("extra2");

if (parse(extra_A,extra_B))
return service;
else {
log("rejected binding");
return null;
}

}
}

我正在使用的 ServiceConnection 包含以下 onServiceConnected() 方法:

@Override
public void onServiceConnected(final ComponentName name, final IBinder service) {
log("onServiceConnected(): successfully connected to the service!");

this.service = MyAIDLService.asInterface(service);
}

所以,我从来没有看到“成功连接到服务!”日志。我第一次运行应用程序(通过 Eclipse)时,我得到了“拒绝绑定(bind)”日志以及“isBound=true”,但从那里我只得到了“isBound=true”,“拒绝绑定(bind)”没有'再出现。

我怀疑这可能与 Android 识别成功绑定(bind)的可能性有关,即使我强行拒绝也是如此。理想情况下,我也可以强制“解除绑定(bind)”,但这是不可能的:我怀疑这是因为,当我终止应用程序时,我得到了一个位于 onUnbind() 中的日志服务的方法(即使一开始就不应该有绑定(bind)!)。

最佳答案

有同样的问题,但意识到我的服务实际上并没有启动。也许尝试将“Context.BIND_AUTO_CREATE”添加到标志中,这将导致创建并启动服务。我不相信 Context.BIND_ADJUST_WITH_ACTIVITY 会启动它,所以 onServiceConnected 可能不会被调用(即使 bindService() 调用返回 true 也不适合我):

    isBound = context.bindService(bindIntent, connection,
Context.BIND_ADJUST_WITH_ACTIVITY | Context.BIND_AUTO_CREATE);

关于Android 绑定(bind)服务不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13273332/

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