安卓中Service组件怎么用-创新互联

这篇文章主要介绍安卓中Service组件怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

创新互联公司是一家专业的成都网站建设公司,我们专注成都网站制作、成都做网站、网络营销、企业网站建设,买链接一元广告为企业客户提供一站式建站解决方案,能带给客户新的互联网理念。从网站结构的规划UI设计到用户体验提高,创新互联力求做到尽善尽美。

1:Service的创建

Service就是服务的意思,它的特点就是当你开启服务以后即使你关闭app它也在运行,直到调用停止服务的方法。典型的用法就是音乐播放器。

Service的创建同Activity一样最好不要自己继承写类。创建方法为自己项目右键->new->other->Android Object->然后一直下一步就可以了(中间有取类名可以自行更改)

2:Service的生命周期

安卓中Service组件怎么用

Service的生命周期有2种一种是开启服务和绑定服务。大家看上图就可以一目了然。

3:启动和绑定服务以及关闭服务

首先是第一种启动服务,使用一个按钮并在其监听事件里启动服务,代码如下


//第一个按键启动服务
findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        service = new Intent();
        //设置跳转到的服务
        service.setClass(MainActivity.this, MyService.class);
        //启动服务
        startService(service );
    }
});
//第二个按键关闭服务
findViewById(R.id.button2).setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        stopService(service);
    }
});

当启动服务以后如果在启动只会调用onStartCommand方法,不会再新建一个服务对象(构造方法只执行一次)。如下图所示

安卓中Service组件怎么用正常的启动结束服务打的日志图如下(被水印遮住了蛋疼。。我源代码会上传大家可以自己验证)

安卓中Service组件怎么用

然后是第二种绑定服务,方法跟上面类似,代码如下

//第三个按键绑定服务
findViewById(R.id.button3).setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        service = new Intent();
        //设置跳转到的服务
            service.setClass(MainActivity.this, MyService.class);
            //启动服务
        bindService(service, null, Context.BIND_AUTO_CREATE);
    }
});
//第四个按键解绑服务
findViewById(R.id.button4).setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        unbindService(null);
    }
});

绑定服务方法的运行顺序如下(如生命周期所示)

安卓中Service组件怎么用

4:动态的访问Service的方法

刚才我启动绑定服务方法时候中间那个参数为null,现在我们来为它传入一个参数(由于要传入的对象是一个接口所以必须重写它的方法)

private ServiceConnection conn = new ServiceConnection() {
                                                                                                                                                                                                                           
    @Override
    public void onServiceDisconnected(ComponentName name) {
                                                                                                                                                                                                                               
    }
                                                                                                                                                                                                                           
    @Override
    public void onServiceConnected(ComponentName name, IBinder service)   {
                                                                                                                                                                                                                         
    }
};
findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
                                                                                                                                                                                                                             
    @Override
    public void onClick(View v) {
        Intent service = new Intent(MainActivity.this, MyService.class);
        bindService(service , conn , Context.BIND_AUTO_CREATE);
    }
});

回到Service的代码页面,在Service中写一个play方法并打日志以便我们观看结果,然后写一个内部类继承binder并写一个方法来调用Service的play()方法,最后在onbind方法返回一个binder对象

@Override
public IBinder onBind(Intent intent) {
    return new MyBinder();
}
                                                                                                                           
class MyBinder extends Binder
{
    public void start()
    {
        play();
    }
}
                                                                                                                           
public void play()
{
    Log.e("MyService", "play()");
}

在回到Activity代码,在conn接口中的onServiceConnected()方法中获取Mybinder对象,在调用对象的start()方法,代码如下

private ServiceConnection conn = new ServiceConnection() {
                                                         
    @Override
    public void onServiceDisconnected(ComponentName name) {
                                                             
    }
                                                         
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        //获取Service中的Mybinder的对象
        MyBinder binder = (MyBinder) service;
        //调用Mybinder中的方法,里面就包含了Service中的方法
        binder.start();
                                                         
};

大功告成。日志打印结果如下


安卓中Service组件怎么用

以上是“安卓中Service组件怎么用”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章名称:安卓中Service组件怎么用-创新互联
网页网址:http://myzitong.com/article/djohoh.html