Android:Context.startService/Context.bindService的区别

来源:互联网 发布:淘宝 军品 编辑:程序博客网 时间:2024/06/05 05:57


 

Context.startService

Context.bindService

基本功能

启动一个Service,如果该Service没有启动则启动一个Service(必要时创建进程),如果已经存在,则不做任何事情。一旦创建以后,不管调用者是否被销毁,该service仍然存在。一般用于不需要像调用者返回结果的情况,如下载文件以后自行停止自己。

通过bindService启动的Service,和调用者之间类似C/S的关系,调用者为client,该Service为Server,可以进行必要的通信。同时可以有多个client bindService到该service。

停止Service

由调用者显示stopService或由自己stopSelf来停止

当所有bind到这个service的进程退出后,自动停止Service

回调API

onStartCommand() 

onBind()

调用

Intent intent = new Intent(this,HelloService.class);

startService(intent);

 

Intent intent = new Intent(this, LocalService.class);
bindService(intent, mConnection, Context.BIND_AUTO_CREATE);

 

BroadcastReceiver

可以调用startService

一般不能直接调用bindService,但是通过registerReceiver(BroadcastReceiver, IntentFilter)注册的Receiver则可以(上下文变化了)。

Service定义方式

实现onStartCommand() 

必须实现ServiceConnection conn

来进行通信

参考

 Service

Bound Services

 

注意事项:默认情况下,调用的Service只运行在主线程中,不会单独创建thread和process,除非指定android:process属性。因此,为了避免ANR,最好在Service中启动thread来做需要处理的事务。