在我的Android应用程序中,我有一个服务和一个绑定到该服务的活动。为了更新活动中的视图,我使用this回答中建议的接口。我更喜欢广播接收器上的接口,因为代码更清晰,我觉得广播接收器很慢而且有点不可预测。然而,这是一个不同的问题。我面临的问题是,在我的活动类中,我发起了像这样的回调
私有ServiceConnection serviceConnection = new ServiceConnection(){
@Override
public void onServiceConnected(ComponentName className, IBinder service) {
// cast the IBinder and get MyService instance
LocalBinder binder = (LocalBinder) service;
myService = binder.getService();
bound = true;
myService.setCallbacks(MyActivity.this); // register
}
@Override
public void onServiceDisconnected(ComponentName arg0) {
bound = false;
}
这一行做到了
myService.setCallbacks(MyActivity.this); // register
然后在我的服务中,我调用我的活动中实现的方法。
myService.callActivityMethod()
问题是,当我在此回调上调用方法时,有时候我的服务中会出现空指针异常。
java.lang.NullPointerException: Attempt to invoke interface method 'void com.my.app.services.myService.callActivityMethod()' on a null object reference
这意味着我在onServiceConnected
内启动的回调为空。我想不到这种情况可能发生的情况。它工作得很好,但我有很少的崩溃报告显示这个错误。有人可以帮我解释为什么会发生这种情况以及可能是防止这种情况发生的方法。谢谢!!