美文网首页程序员
安卓学习之Service

安卓学习之Service

作者: 于无声处写写写 | 来源:发表于2018-07-07 21:29 被阅读15次

    定义一个服务

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

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

    服务需要在Manifest文件中进行注册
    <application <Service android:name=".MyService" /Service>/application>
    经过以上步骤,一个服务就定义完成了

    启动和停止服务

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

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

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

    活动和服务通信

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

    • 首先要创建一个Binder对象


    • 在MyService类中实例化DownloadBinder对象
    • 在MyService类中的onBind()方法中返回这个Binder对象
    • 在MainActivity中实例化一个ServiceConnection匿名类


      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

        本文链接:https://www.haomeiwen.com/subject/fviguftx.html