- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们的应用程序连接到通过 AIDL 接口(interface)公开的 IPC Service
。到目前为止一切正常,但突然我们观察到在调用 onServiceConnected
回调后立即抛出 NullPointerException。
我们通过以下方式绑定(bind)到服务:
boolean isServiceBound = context.bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
然后我们确保服务绑定(bind)成功,后台线程等待 onServiceConnected
回调被调用:
private ServiceConnection serviceConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className,
IBinder binder) {
Log.d(TAG, "converting Binder into IAidlService");
aidlService = IAidlService.Stub.asInterface(binder);
serviceConnected(); // this call releases background thread that waits for connection to be established
}
public void onServiceDisconnected(ComponentName className) {
Log.d(TAG, "IAidlService disconnected unexpectedly");
aidlService = null;
}
};
在 onServiceConnected
回调调用期间调用 serviceConnected()
后,我们假设连接已建立并且 aidlService
变量已初始化(除非onServiceDisconnected
之后被调用,但这里不是这种情况。
正如我所说,这个方案在一段时间内运行良好,但突然我们遇到了在 onServiceConnected
之后抛出 NullPointerException 的情况。日志输出:
01-21 14:06:32.717 22651-22651/com.xxx.xxx D/LocalService: converting Binder into IAidlService
01-21 14:06:32.721 22651-9574/com.xxx.xxx E/AndroidRuntime: FATAL EXCEPTION: IntentService[LocalService]
01-21 14:06:32.721 22651-9574/com.xxx.xxx E/AndroidRuntime: Process: com.xxx.xxx, PID: 22651
01-21 14:06:32.721 22651-9574/com.xxx.xxx E/AndroidRuntime: java.lang.NullPointerException: Attempt to invoke interface method 'void com.yyy.yyy.IAidlService.someMethod(android.os.Bundle)' on a null object reference
如您所见,aidlService
在主线程上调用 onServiceConnected
后在后台线程中使用。我 99.9% 确信这里没有多线程问题,并且使后台线程等待直到 serviceConnected()
被调用的逻辑工作正常(并且在 logcat 中看到的 4ms 延迟支持这种说法).
我们无法重现此行为。
所以,我们知道 onServiceConnected
被调用了,但是 aidlService
变量没有被初始化。我只看到此行为的一个潜在原因:系统传递给 onServiceConnected
的 IBinder
对象是 null
(我 100% 确信IPC 服务的 onBind()
返回的对象有效)
我在网上找不到关于这种情况的任何信息,因此我的问题是:
onServiceConnected
将作为第二个参数传递 null
而不是远程 Service 返回的有效 IBinder
?最佳答案
感谢@pskink 的帮助,我意识到 onServiceConnected
不能用 null IBinder
调用,AIDL 的 Stub.asInterface
也不能返回 null。
底线:无需在 onServiceConnected
回调中进行 null 检查。
关于Android IPC : onServiceConnected called, 后跟 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34973257/
我是一个初学者,我编写了一个简单的程序来展示服务的工作原理。 ..... toStartService = new Intent(this, SimpleService.class); sc
我正在尝试像这样从另一个服务绑定(bind)服务: public class ServiceA extends Service { private ServiceB mDataService;
我已经提到了以下问题,但找不到答案: Can't get service object (onServiceConnected never called) , onServiceConnected n
我在使用后台服务时遇到问题。 我正在使用 2 个 Activity 的服务。 第一个 Activity 开始 Service与 startService(intent)并使用 bindService(
我开发了一个绑定(bind)服务作为一个单独的项目,我正在尝试从客户端访问该服务,但不知何故我得到了 AndroidRuntime: FATAL EXCEPTION: main 08-08 12:00
我正在实现 Service,它与服务器建立 TCP 连接,然后允许客户端通过此连接传递消息。客户端使用 bindService 调用连接到服务。结果 onServiceConnected 在客户端 S
如何自己启动一个服务??我不想从另一个 Activity 启动服务。但我想将服务绑定(bind)到 Activity 。我的问题与此链接中描述的完全一样。 onServiceConnected nev
我尝试为 Android 上的音素状态编写一个 XML 日志。首先,我编写了一个类来在 Activity 处于 Activity 状态时记录内容。现在我尝试在服务中编写 xml 文件并将服务绑定(bi
我一直在寻找一个明确的答案,但找不到任何地方。当 Android 应用程序尝试与服务建立连接并实现 ServiceConnection 方法(onServiceConnected() 和 onServ
我正在尝试将一些应用内购买添加到我正在开发的应用中,但进展并不顺利。 我有一个像这样的 FragmentActivity: public class TestInAppBilling extends
我正在尝试构建并运行一个用于 react native 应用程序的服务,在该服务运行后,我需要调用一些服务方法,这意味着我需要获取正在运行的服务的实例,所以我正在尝试使用bindservice()。
我正在使用 AIDL 编写一个服务来远程调用方法。我能够成功连接到该服务,并且还可以调用它的方法。但是,如果我尝试调用 onServiceConnected() 中的方法,则会出现空指针异常。代码片段
我发现的许多类似问题都没有帮助解决我的问题。 以下是我看过的一些问题: ServiceConnection.onServiceConnected() never called after bindin
我正在尝试开发一个连接 android 和 RedBear BLE shield 的应用程序。 第一次一切正常。但是当我第二次尝试连接到设备时,它不起作用。 OnServiceConnected()
在我打开我的应用程序后,它会跳转到辅助功能设置。但是在我打开我的 AccessibilityService(称为 VoiceService)后,onServiceConnected 没有被调用。 你能
public class DeviceScanActivity extends AppCompatActivity/*ListActivity*/ { @Override public vo
我有一个非常简单的 Activity : public class MainActivity extends Activity { private Intent serviceInt
我有一个特殊的情况:由广播接收器启动的服务启动一个 Activity 。我想让这个 Activity 能够与服务进行通信。我选择使用 AIDL 来实现它。除了在 Activity 的 onCreate
我们的应用程序连接到通过 AIDL 接口(interface)公开的 IPC Service。到目前为止一切正常,但突然我们观察到在调用 onServiceConnected 回调后立即抛出 Null
在游戏应用程序中,我有以下场景: 从主游戏 Activity 开始,玩家会启动几个在后台运行且持续时间不同的游戏任务。 玩家应该能够在单独的View中查看正在运行的游戏任务的进度。 为此,我创建了两个
我是一名优秀的程序员,十分优秀!