| 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 | ||
调用 |
Intent intent = new Intent(this,HelloService.class); startService(intent);
|
Intent intent = new Intent(this, LocalService.class);
bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
|
可以调用startService | 一般不能直接调用bindService,但是通过registerReceiver(BroadcastReceiver, IntentFilter)注册的Receiver则可以(上下文变化了)。 | |
Service定义方式 | 必须实现ServiceConnection conn来进行通信 | |
参考 |
注意事项:默认情况下,调用的Service只运行在主线程中,不会单独创建thread和process,除非指定android:process属性。因此,为了避免ANR,最好在Service中启动thread来做需要处理的事务。