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();
}

 

posted @ 2015-12-04 16:20  ivluowei  阅读(185)  评论(0)    收藏  举报