- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试像这样从另一个服务绑定(bind)服务:
public class ServiceA extends Service {
private ServiceB mDataService;
private boolean mIsBound;
@Override
public void onCreate(){
super.onCreate();
doBindService();
/* ... */
}
@Override
public void onStart(final Intent intent, final int startId){
/*...*/
}
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
mDataService = ((ServiceB.LocalBinder)service).getService();
}
public void onServiceDisconnected(ComponentName className) {
mDataService = null;
}
};
void doBindService() {
bindService(new Intent(ServiceA.this, ServiceB.class), mConnection, Context.BIND_AUTO_CREATE);
mIsBound = true;
}
void doUnbindService() {
if (mIsBound) {
unbindService(mConnection);
mIsBound = false;
}
}
}
这是我从 goolge 的示例中提取的一个简单 fragment :)代码工作正常,mDataService 持有对 ServiceB 实例的引用,但有一件事我无法理解:onServiceConnected
回调是在调用 onStart
之后调用的。正如我在 android 文档中看到的那样,the callback is running on the main thread - 但我能指望它总是按我的顺序发生吗? onCreate -> onStart -> onServiceConnected ?
最佳答案
如果官方开发指南(仍然)不清楚,Context.bindService() 确实是一个异步调用。这也解释了为什么将 ServiceConnection.onServiceConnected()
作为回调实现。
查看 dev guide :
A client binds to a service by calling
bindService()
. When it does, it must provide an implementation ofServiceConnection
, which monitors the connection with the service.The return value of
bindService()
indicates whether the requested service exists and whether the client is permitted access to it.When the Android system creates the connection between the client and service, it calls
onServiceConnected()
on theServiceConnection
. TheonServiceConnected()
method includes anIBinder
argument, which the client then uses to communicate with the bound service.
ServiceConnection.onServiceConnected()
在未来某个时间点在 UI 线程上调用(不是在调用 Context.bindService() 之后立即),一旦连接到服务正确建立。
关于android - 究竟什么时候会调用有界服务的 onServiceConnected?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10802456/
我是一个初学者,我编写了一个简单的程序来展示服务的工作原理。 ..... 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中查看正在运行的游戏任务的进度。 为此,我创建了两个
我是一名优秀的程序员,十分优秀!