• Android(java)学习笔记169:服务(service)之为什么使用服务


    1.服务 service

    长期在后台运行的进程,一般没有应用程序界面
     
    2.进程线程和应用程序之间的关系
    应用程序开启,系统启动一个Linux进程,所有的组件都是运行在同一个进程的同一个线程(main)里面。
     
    (1)Process lifecycle 进程的生命周期
    Android操作系统会尽可能长期的保留应用程序的进程,系统根据进程的优先级回收进程,释放内存。
    如果进程被系统回收了,开启的所有的线程都不在了
     
    (2)
    Foreground process 前台进程
    你还能看到应用程序的界面,并且可以操作这个应用程序
     
    Visible process 可视进程
    你可以看到这个应用程序,但是操作不了
     
    Service process 服务进程
    应用程序带一个后台运行的服务,服务没有停止
     
    Background process 后台进程
    应用程序被最小化,但是没有退出
     
    Empty process 空进程
    应用程序没有任何活动的组件了
     
    优先级排序:前台进程 > 可视进程 服务进程 后台进程 空进程
     
    (3)问题:如果开启子线程,也可以没有界面,长期后天运行。为什么不用子线程,而是使用service?

        如果使用子线程(后台进程)实现后台运行,一旦系统发现内存不足,就会根据优先级回收进程,释放内存;

    服务(服务进程)系统发现内存不足,由于服务进程优先级中等,不会最先回收,而且就算回收了服务进程,

    Android系统一旦发现内存充足的时候,就会自动重启服务进程。

     

     

    3.服务里面是不是可以执行耗时的操作 ?

        服务是运行在主线程里面的,Main Ui线程,不可以执行耗时的操作(20s没有响应就会出现ANR),如果要执行耗时的操作需要在服务里面开启子线程执行耗时的操作。

    服务的特点就是:保证当前的应用程序不容易被系统回收,即使被回收还会复活

    应用实例:股票(每隔几秒刷新页面),还有短信监听器(后台静悄悄窃听用户短信信息)

     

     
     
     
  • 相关阅读:
    [转]Linux FTP服务配置
    [转]手把手教你nginx下如何增加网站
    [转]linux一键安装web环境全攻略
    CentOS命令
    [转]Response对象的属性和方法
    beforeRouteLeave vue监听返回的使用方法
    ue项目浏览器出现卡顿及崩溃的原因查找与解决方案
    vue中,解决chrome下,的warning, Added nonpassive event listener to a scrollblocking ‘mousewheel‘ event 问题
    npm
    Java线程池使用案例
  • 原文地址:https://www.cnblogs.com/hebao0514/p/d451707ea4a03524388e20aca3be43b8.html
Copyright © 2020-2023  润新知