安卓学习之Service

定义一个服务

新建一个类,继承自Service。重写父类的方法。

  • public IBinder onBind(Intent) 这是Service中唯一的一个抽象方法,必须在子类中实现。
  • public void onCreate() 服务创建的时候调用
  • public int onStartCommand(Intent intent,int flags,int startId) 服务启动的时候调用,如果希望服务一旦启动就立即执行某个动作,则逻辑写在这里面
  • public void onDestroy() 服务销毁的时候调用,回收资源

服务需要在Manifest文件中进行注册
/application>
经过以上步骤,一个服务就定义完成了

启动和停止服务

服务在活动里面启动和停止

  • 启动服务
    Intent intent=new Intent(this,MyService.class);
    startService(intent);
  • 停止服务
    Intent intent=new Intent(this,MyService.class);
    stopService(intent);

onCreate()方法是只有在服务第一次启动的时候才调用。
onStartCommand()方法是每次启动服务都会调用。

活动和服务通信

假设此处要实现下载功能和查看下载进度功能
要通过服务中的onBind()方法实现两者的通信

  • 首先要创建一个Binder对象


    安卓学习之Service_第1张图片
  • 在MyService类中实例化DownloadBinder对象
  • 在MyService类中的onBind()方法中返回这个Binder对象
  • 在MainActivity中实例化一个ServiceConnection匿名类


    安卓学习之Service_第2张图片
    image.png
  • 在onServiceConnected()方法中,对service进行强转


    image.png
  • 在MainActivity中需要将活动和服务进行绑定
    Intent bindIntent=new Intent(this,MyService.class);
    bindService(bindIntent,connection,BIND_AUTO_CREATE);
  • bindService这个方法中,三个参数分别是: 自定义服务的intent,ServiceConnection的实例,最后一个是标志位,BIND_AUTO_CREATE表示在活动和服务绑定后自动创建服务。这个标志位会导致service中的onCreate()方法得到执行,但是onStartCommand()方法却不会执行。
  • 如果想解绑活动和服务,调用unbindService()方法就可以了

服务的生命周期

  • 每个服务都只会存在一个实例,不管调用了多少次startService()方法,只需调用一次stopService()或者stopSelf()方法

你可能感兴趣的:(安卓学习之Service)