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),如果要执行耗时的操作需要在服务里面开启子线程执行耗时的操作。

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

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

 

 
 
 

Android(java)学习笔记226:服务(service)之为什么使用服务的更多相关文章

  1. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  2. Java学习笔记4

    Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...

  3. 20155234 2016-2017-2第十周《Java学习笔记》学习总结

    20155234第十周<Java学习笔记>学习总结 教材学习内容总结 网络编程 在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据发送到指定的位置,或者接收到指定 ...

  4. Android:日常学习笔记(2)——分析第一个Android应用程序

    Android:日常学习笔记(2)——分析第一个Android应用程序 Android项目结构 整体目录结构分析 说明: 除了APP目录外,其他目录都是自动生成的.APP目录的下的内容才是我们的工作重 ...

  5. java学习笔记之基础篇

    java选择语句之switch   //switch可以用于等值判断 switch (e) //int ,或则可以自动转化成int 的类型,(byte char short)枚举jdk 7中可以防止字 ...

  6. Android Studio 学习笔记(一)环境搭建、文件目录等相关说明

    Android Studio 学习笔记(一)环境搭建.文件目录等相关说明 引入 对APP开发而言,Android和iOS是两大主流开发平台,其中区别在于 Android用java语言,用Android ...

  7. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  8. Android自动化学习笔记:编写MonkeyRunner脚本的几种方式

    ---------------------------------------------------------------------------------------------------- ...

  9. Android动画学习笔记-Android Animation

    Android动画学习笔记-Android Animation   3.0以前,android支持两种动画模式,tween animation,frame animation,在android3.0中 ...

  10. 20145330第九周《Java学习笔记》

    20145330第九周<Java学习笔记> 第十六章 整合数据库 JDBC入门 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JD ...

随机推荐

  1. CPU与外设传送数据方式

    7.2 CPU与外设之间数据传送的方式 在微型计算机系统中,CPU与外设之间的数据传送方式主要有程序传送方式.中断传送方式和直接存储器存取(DMA)传送方式,分别介绍如下.     7.2.1 程序传 ...

  2. iOS手写2048--基于Xcode7.1

    闲着没事自己想了下,半天写出来了,没有美化,只是实现了基本的2048,被我改成了A.B.C.D.E: 没有游戏开发经验,完全基于uiview 和 一大堆逻辑计算,如果你有指针.链表的使用经验,应该会很 ...

  3. 中文简体windows CMD显示中文乱码解决方案

    因为重装系统,以前是英文的,现在的镜像文件是中文简体windows 10.所以只能将就使用. 下载了JDK,CMD 写了命令java,结果一堆乱码(问号???).发现System的locale默认设置 ...

  4. Arrays常用API的事例

    import java.util.ArrayList;import java.util.Arrays;import java.util.List; public class TestArrays { ...

  5. union 代替or的情况

    技巧2:union 代替or的情况 当SQL语句中,or 条件上面有一个为子查询,并且子查询上的表与源表不同,这个时候就可以用union代替or或者你发现执行计划中的 filter 有 or 并且 o ...

  6. border粗细不一

    devicePixelRatio = 1.5 引发的问题

  7. 动态规划:NOI 2009 管道取珠

    [NOI2009] 管道取珠 输入文件:ballb.in   输出文件:ballb.out   简单对比 时间限制:1 s   内存限制:512 MB #include <iostream> ...

  8. select的使用(二)

    多表查询 /*基本连接*/ select a.Name,b.Name from T_Employee a,T_Department b where a.DepartmentId=b.Id /*内连接, ...

  9. Redis结合EntityFramework结合使用的操作类

    最近一段时间在研究redis.  各种不懂, 各种问题.也看了N多的资料. 最终参照着  张占岭 的博客  http://www.cnblogs.com/lori/p/3435483.html   写 ...

  10. [转]浏览器如何和Web服务器通信

    http://hi.baidu.com/ywqme/item/b5297014b2e58f4e6826bb74 概述 普通网民打开网页,访问网站,并不需要了解所谓HTTP协议.作为软件工程师,了解一下 ...