Service的使用
一、Service的使用
服务两种启动方式
* startService
* 开始服务,会使进程变成为服务进程
* 启动服务的activity和服务不再有一毛钱关系
* bindService
* 绑定服务不会使进程变成服务进程
* 绑定服务,是activity与服务建立连接,如果activity销毁了,服务也会被解绑并销毁,但是如果服务被销毁,activity不会被销毁
* 绑定服务和解绑服务的生命周期方法:onCreate->onBind->onUnbind->onDestroy
#两种启动方法混合使用
* 用服务实现音乐播放时,因为音乐播放必须运行在服务进程中,可是音乐服务中的方法,需要被前台Activity所调用,所以需要混合启动音乐服务
* 先start,再bind,销毁时先unbind,在stop
##使用服务注册广播接收者
* Android四大组件都要在清单文件中注册
* 广播接收者可以使用清单文件注册
* 一旦应用部署,广播接收者就生效了,直到用户手动停止应用或者应用被删除
* 广播接收者可以使用代码注册
* 需要广播接收者运行时,使用代码注册,不需要时,可以使用代码解除注册
* 电量改变、屏幕开关,必须使用代码注册
事例:
public class MainActivity extends Activity {
ControllerInterface ci;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent(this, MusicService.class);
//把进程变成服务进程
startService(intent);
//绑定服务获取中间人对象
bindService(intent, new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
ci = (ControllerInterface) service;
}
}, BIND_AUTO_CREATE);
}
public void play(View v){
ci.play();
}
public void pause(View v){
ci.pause();
}
}
public class MusicService extends Service {
@Override
public IBinder onBind(Intent intent) {
return new MusicController();
}
class MusicController extends Binder implements ControllerInterface{
@Override
public void play() {
MusicService.this.play();
}
@Override
public void pause() {
MusicService.this.pause();
}
}
public void play(){
System.out.println("开始播放音乐");
}
public void pause(){
System.out.println("暂停播放音乐");
}
}
public interface ControllerInterface {
void play();
void pause();
}

浙公网安备 33010602011771号