Android基础知识Service

                                       Service--------  实现程序后台运行的组件

一、服务的创建

新建java类继承自Service实现onBind()方法,该方法是Service中唯一的抽象方法,然后重写onCreate()方法,onStartCommand()方法 和onDestroy()方法。    (记得在AndroidManifest.xml文件中注册服务,当然若果使用AndroidStudio自动生成的话,AS会帮我们自动注册的)

onBind() 实现服务和活动的通信

onCreate()方法在服务创建的时候调用,

onStartCommand()方法每次启动服务的时候调用

onDestroy()服务销毁的时候调用,在这里回收不需要的资源

二、服务的启动和停止

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

startService(intent);//启动服务

stopService(intent);//停止服务

当服务启动的时候我们可以在活动中停止它,也可以在服务里调用stopSelf() 方法

三、活动和服务之间的通信

我们创建了服务,那是需要服务来干活的,所以我们需要在服务中写自己的业务逻辑代码,所以我们需要在服务里创建一个Binder对象来对我们的业务逻辑进行监管,部分代码示例:

public class MyserviceTest extends Service {
    private MyTask mbinder=new MyTask();

    class MyTask extends Binder{

        //具体的业务逻辑

    }
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return mbinder;

}

}

我们在服务里创建的具体逻辑怎么来控制呢,这就涉及到服务跟活动的绑定,通过活动来控制服务里的逻辑,我们在活动里新建一个 匿名类,ServiceConnection  重写方法:代码截图如下:

private MyserviceTest.MyTask myTask;

private ServiceConnection serviceConnection=new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        myTask= (MyserviceTest.MyTask) service;
        //myTask 调用服务里的方法,实现活动对service的控制
    }

    @Override
    public void onServiceDisconnected(ComponentName name) {

    }
};

到这里其实还没有实现服务跟活动的绑定,我们需要书写活动中的触发事件,通过intent来绑定 部分代码如下:

Intent bindintent =new Intent(this,MyService.class);

bindService(bindIntent,connection,BIND_AUTO_CREATE);//绑定服务

unbindService(connection);//解绑服务

好到这里活动跟服务就绑定完毕,实现了服务跟活动的通信。

四、服务的生命周期

     在项目中调用了服务,startService()后,服务开始启动,并回调onStartCommand()方法,如果该服务是第一次创建的话,会先调用onCreate(),每调用一次startService()方法,onStartCommand()方法都会执行一次,但是服务的实例只有一个,所以当你调用stopSelf()或者stopService() 一次,该服务就会停止。

     当我们调用bindService()是,活动跟服务就会建立一个长连接,这时候回调服务中的onBind()方法,调用方可以得到onBind()返回的IBinder对象实例,从而可以建立通信。

   当调用了startService()后又去调用stopService()这时服务中的onDestroy()方法就会执行,同理调用了bindService()方法之后,再调用unbindService()方法 onDestroy()方法就会执行。

   当调用了startService()后又调用了bindService(),这时我们需要调用stopService()和unbindService()才可以销毁服务。

                                                                   Service生命周期 (个人看法)

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值