在我的Activity中,我有实例变量LocalBinder mBinder ;ServiceConnection mConnection; and
boolean mBound;`
在onCreate
我实例化ServiceConnection
并将其设置为mConnection
,如下所示:
mConnection=new ServiceConnection()
{
public void onServiceConnected(ComponentName class name,IBinder service){
Log.d(TAG,"Service connected");
mBinder=(LocalService.LocalBinder)service;
}
我在onServiceDisconnected(ComponentName className)
问题似乎是使用:
绑定服务的调用Intent intent=new Intent(MainActivity.this,LocalService.class);
bindService(intent,mConnection,Context.BIND_AUTO_CREATE);
永远不会发生...因此永远不会调用ServiceConnection ...当我在LocalBinder
类中使用公共方法时,它会抛出异常,因为binder为null。
我有一个非null ServiceConnection
对象并使用了正确的上下文。活动是在app start上启动的。LocalBinder
就像你可能已经猜到的一个静态内部类{{1 }}
本地服务如下所示:
LocalService
当我实现 static class LocalBinder
{
public int getRandomNumber()
{
return (int)(Math.random()*100);
}
}
public IBinder onBind(Intent intent)
{
LocalBinder binder=new LocalBinder();
return binder;
}
和onStartCommand
时服务启动但它不会绑定...即使startService(intent);
返回true,也不会显示Service Connected ...因此IBinder是没有传递给导致NullPointerException的Activity
答案 0 :(得分:0)
我认为您不应该创建ServiceConnection() - 相反,我认为您在Activity中实现了ServiceConnection接口,然后在bindService中传递Activity:
public class MyClientActivity extends Activity implements ServiceConnection {
@Override
public void onStart() {
bindService(new Intent(MainActivity.this,LocalService.class), this, BIND_AUTO_CREATE);
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.d(TAG,"Service connected");
mBinder=(LocalService.LocalBinder)service;
}
您还需要实现onServiceDisconnected()。希望有所帮助。