【发布时间】:2012-09-07 11:18:25
【问题描述】:
我对 Android 开发很陌生,并且在绑定服务的概念上苦苦挣扎
我已经在活动的onCreate 方法中将服务绑定到活动
startService(intent);
bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
mConnection 是一个 ServiceConnection 对象,我已经在匿名类中重写了 onServiceConnected 回调方法
在回调中,mService(它是LibraryService 类型的类成员,LibraryService 是我的Service 的子类)被设置为引用我们绑定到的LibraryService 对象:
mService = binder.getService();
本以为在onCreate中调用bindService后就可以通过mService引用调用LibraryService,但此时仍设置为null,表示onServiceConnected回调尚未执行。
我尝试使用 Log 打印由 mService 方法生成的字符串的值:
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 回调的正文中访问它吗?
【问题讨论】:
标签: android android-activity android-service