onServiceConnected()未调用

问题描述 投票:17回答:7

我在使用后台服务时遇到问题。 我正在使用2项活动的服务。

第一项活动与Service开始startService(intent)并与bindService(intent, mConnection, Context.BIND_AUTO_CREATE);结合

这很完美,我可以在Message发送onServiceConnected()

第二个活动只与Service绑定(因为它已经开始),再次使用bindService(intent, mConnection, Context.BIND_AUTO_CREATE);

现在这是我的问题: 在第二个活动中,我有一个Button,当我按下它时应该使用该服务。 但是,onServiceConnected()从未在此活动中被调用,因此我无法使用绑定器创建Messenger以将Message发送到服务器。

有谁知道什么时候onServiceConnected()被正确调用,或者它可能正在等待什么? 或者也许别的东西来解决这个问题?

编辑:bindService返回false,这可能导致什么?

提前致谢

android android-service
7个回答
27
投票

经过一些研究,我发现这是Android中的一个已知问题。

我正在谈论的第二项活动是在TabActivity中用作内容的活动。

解决这个问题的方法是在应用程序上下文中调用bindService(...),而不是使用getApplicationContext().bindService(...)调用活动上下文


19
投票

你需要添加:

<service android:name="package.path.to.your.service.class" android:enabled="true"></service>

在Android清单文件中。


9
投票

在清单中添加绑定..

 <service
            android:name=".MyAccessibilityService"
            android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE" >
            <intent-filter>
                <action android:name="android.accessibilityservice.AccessibilityService" />
            </intent-filter>

</service>

MyAccessibilityService您的服务名称。


7
投票

它刚刚发生在我身上。 不要忘记在binder返回之前实例化你的onbind类。愚蠢的错误,但它发生了。希望这将有助于未来的人。

private YourBinder thisBinder;

oncreate
{
  thisBinder = new YourBinder(); //don't forget this.
}


public class YourBinder extends Binder
{

}

public IBinder onBind(Intent intent) 
{
  return thisBinder;
}

1
投票

这对我有用

代替

public IBinder onBind(Intent intent) {
    return null;
}

我用了

public IBinder onBind(Intent intent) {
    return mMessenger.getBinder();
}

0
投票

我是xmarian并遇到同样的问题,后来发现我没有给该服务正确的名称。所以服务名称应该是name属性。我认为xmarian编译器在Android XML中做同样的事情。


0
投票

在我的情况下,这是因为我忘记在服务中实例化绑定器,因此onBind返回null。我有这个:

    private ServiceBinder mServiceBinder;

而不是这个:

    private ServiceBinder mServiceBinder = new ServiceBinder();
© www.soinside.com 2019 - 2024. All rights reserved.