我对 Android 开发人员很陌生,并且在绑定服务的概念上苦苦挣扎
我已在活动的onCreate
方法中将服务绑定到活动
startService(intent);
bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
mConnection
是我在匿名类中ServiceConnection
重写了回调方法的对象onServiceConnected
在回调中,mService
(它是 type 的类成员LibraryService
,LibraryService
是我的子类Service
)设置为引用LibraryService
我们绑定到的对象:
mService = binder.getService();
我以为在 onCreate 中调用 bindService 之后,我就可以通过 mService 引用调用 LibraryService 了,但此时它仍然设置为 null,表示尚未执行 onServiceConnected 回调。
我试图打印由mService
使用 Log 的方法生成的字符串的值:
if (mService != null) {
Log.d(LOG_TAG, "In onCreate getLogFileName string value: " + mService.getLogFileName("pulse"));
} else {
Log.d(LOG_TAG, "In onCreate getLogFileName string value: null");
}
正如我提到的 - 它在 onCreate 中仍然为空,然后我将相同的日志代码添加到 onStart 和 onResume 但 mService 仍然为空
我的问题是该回调何时执行?我原以为它必须发生在onCreate
方法的主体内,但显然不是。我想我需要一些关于 Android 系统如何/何时执行回调的指示
我知道回调确实会被执行,因为我在实例化 mService 的语句上放置了一个断点并且它命中了该语句。我只是不明白它什么时候发生,即我怎么知道它什么时候可以假设mService
已经设置?我只能在OnServiceConnected
回调正文中访问它吗?