美文网首页
Service相关

Service相关

作者: Infinity_空 | 来源:发表于2021-12-26 16:38 被阅读0次
    1. 启动Service的方法有哪些?它们的区别在哪?有哪些使用场景?

      • 生命周期:
        • startService:onCreate->onStartCommand->onDestory,如果没有执行stopService,Service会一直在后台运行。
        • bindService:onCreate->onBind-onUnbind->onDestory,执行bindService之后,service会和client绑定在一起,如果client销毁了,那么对应的service也会被停止。但是在client销毁时需要主动调用unbindService,否则会出现内存泄漏。
        • 多次调用startService,service只会被创建一次,onCreate只会回调一次,但是onStartCommand每次都会被调用。
        • 多次调用bindService,onCreate和onBind都只会回调一次,不会被多次创建和绑定。
      • 交互:
        • startService跟调用者不能进行交互,是独立且长期存在的
        • bindService跟调用者绑定,可以与调用者进行交互,与调用者的生命周期绑定
      • 使用场景:
        • 需要下载一个大文件,或者后台播放音乐视频时,activity不需要与service交互,那么就使用startService
        • 如果在音乐或者视频播放过程中,需要获取一些信息,此时可以用过bindService与服务绑定,进行一些交互
    2. 如果一个service既被startService又被bindService会有什么情况?
      不管是startService还是bindService,onCreate只会调用一次,即service只会被创建一次。每调用一次startService,onStartCommand就会被调用一次。此后,如果要关闭service,需要同时调用stopService和unbindService(或者是客户端关闭),否则这个service不会被停止。

    3. Service如何保活

      1. 启动多个service互相拉起
      2. 监听系统广播或者是三方应用广播(微信、支付宝等)进行唤醒
      3. 利用账号同步机制拉活
      4. 提高service的优先级,延长被kill的时间
      5. 利用像素为1的Activity,监听解锁屏和截屏的广播
      6. JobScheduler唤醒Service,Android7.0失效(因为如果没有启动前台服务,则会抛出IllegalStateException)
    4. IntentService:IntentService继承于Service,默认开启一个工作线程,不断接收Intent执行任务,每次只执行一个任务,执行完毕之后,再执行下一个任务,如果之后没有任务了,则自动停止服务。
      因为IntentService单独启动了一个线程,所以即使是耗时任务,也不会阻塞主线程工作,而Service是运行在主线程,可能会出现ANR。

    5. JobIntentService:Android O后,用于方便启动JobService的一个工具类。

    相关文章

      网友评论

          本文标题:Service相关

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