安卓学习之Service

定义一个服务

新建一个类,继承自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()方法
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 【Android Service】 Service 简介(★★★) 很多情况下,一些与用户很少需要产生交互的应用程...
    Rtia阅读 3,179评论 1 21
  • 本节代码下载地址:WillFlowService 一、服务是什么? 服务(Service)是一种在后台运行的组件,...
    常思行阅读 375评论 0 0
  • Service的生命周期 service的生命周期,从它被创建开始,到它被销毁为止,可以有两条不同的路径: A s...
    _执_念__阅读 1,586评论 0 19
  • 参考: 服务|Android Developers 一. 什么是服务 服务是一个可以在后台执行长时间运行操作而不提...
    NickelFox阅读 563评论 0 3
  • 不知道你有没有这样的时刻,在某种特定的环境下(尽管并不特殊)会突然感受到难以名状的喜悦。那是生活的魔鬼或者说精灵吧...
    晓竹轩主阅读 223评论 0 0