服务:长期后台运行的没有界面的activity,程序写法和activity类似。

安卓系统进程管理是按照一定规则的:

1.默认情况下,关闭掉一个应用程序,清空了这个应用程序的任务栈,应用程序的进程还会保留。因为手机内存较小,方便下次快速启动应用程序,但是也会带来内存不足的问题。

2.安卓系统有一套内存清理机制,按照优先级去回收系统的内存。

进程分为5个等级的优先级:(从高到低)

1.Foreground process 前台进程  用户正在玩的应用进程

2.Visible process 可视进程   用户仍然可以看到这个进程的界面

3.Service process服务进程  应用程序有一个组件在后台运行

4.Backgroundprocess 后台进程  应用程序没有服务在运行,并且最小化(activity onstop)

5.Empty process 空进程   没有任何运行的activity ,任务栈空了

线程是运行在进程里的,当一个应用程序按返回键后,任务栈被清空,变成一个空进程,很容易被回收,里面的子线程也停止了。因此如果有需要长期后台运行的组件,不要在activity 开启子线程,应该创建服务,在服务里面开启子线程,这样优先级就变高了。

服务的目的:

1.长期后台运行。

2.提高进程的优先级,系统不容易回收掉进程,即便回收了,内存充足的时候,会把进程重新创建。

由于服务没有界面,因此生命周期也更简单,只有onCreat() onStartCommand() onDestroy()三个方法。

服务的生命周期:



一、采用start的方式开启服务 

生命周期如下:

                                               onStart()过时了

开启服务: onCreate()--> onStartCommand()  ---> onDestory();



如果服务已经开启,不会重复的执行onCreate(), 而是会调用onStart()和 onStartCommand();



服务停止的时候 onDestory().



服务只会被停止一次





二、服务还有一种开启方式,绑定的方式开启服务。

onCreate() --->onBind();--->onunbind()-->onDestory();

绑定服务不会调用onstart或者onstartcommand方法;





混合调用的服务的生命周期:

服务长期后台运行,又想调用服务的方法:

1.start方式开启服务(保证服务长期后台运行)

2.bind方式绑定服务(保证调用服务的方法)

3.unbind解除绑定服务

4.stopService停止服务。



三、两种开启服务方法的区别。



start方式开启服务。 一旦服务开启跟调用者(开启者)就没有任何关系了。

开启者退出了,开启者挂了,服务还在后台长期的运行。

开启者没有办法去调用服务里面的方法。(美国的司法独立)不能通过new一个service来调用service里面的方法,只能通过系统框架(activity)开启service。



bind的方式开启服务,绑定服务,调用者挂了,服务也会跟着挂掉。不求同时生,但求同时死。

开启者可以调用服务里面的方法。

bind方式绑定服务过程如下:

1.新建一个sevice类,里面建立一个内部类A继承Binder,包含调用service里面方法的方法。

2.利用service里面的onBind方法返回1中的内部类A对象。

3.在activity的bind方法中采用绑定的方式去开启服务,

Intent intent = new Intent(this,MyService.class);

    conn = new MyConn();

    bindService(intent, conn, BIND_AUTO_CREATE);

conn为4中的类的对象。

4.写一个类继承ServiceConnection类,里面实现onServiceConnected方法(方法中需要获取A对象),还需要实现onServiceDisconnected方法。

5.利用4中的A的对象调用服务里面的方法。

安卓四大组件之--service的更多相关文章

  1. Android四大组件之Service

    Android四大组件之Service Android支持服务的概念,服务是在后台运行的组件,没有用户界面,Android服务可用有与活动独立的生命周期.Android支持两种类型的服务: 本地服务: ...

  2. Java乔晓松-android的四大组件之一Service(服务的绑定)

    android的四大组件之一Service(服务的绑定) 怎么绑定服务,又怎么解除服务,代码如下: MainActivity.java源码: package com.example.lesson14_ ...

  3. 【Android开发日记】之入门篇(五)——Android四大组件之Service

    这几天忙着驾校考试,连电脑都碰不到了,今天总算告一段落了~~Service作为Android的服务组件,默默地在后台为整个程序服务,辅助应用与系统中的其他组件或系统服务进行沟通.它跟Activity的 ...

  4. 【Android】安卓四大组件之Activity(二)

    [Android]安卓四大组件之Activity(二) 前言 在这篇文章之前,我已经写过了一篇有关Activity的内容,是关于activity之间的页面跳转和数据传递,而这篇文章着重强调的是Acti ...

  5. 【Android】安卓四大组件之Activity(一)

    [Android]安卓四大组件之Activity(一) 前言 Activity是Android学习中的一个重要组件,想要对其进行系统的了解可以分为几块内容,这一大章节的内容是有关于activity之间 ...

  6. 【Android】安卓四大组件之内容提供者

    [Android]安卓四大组件之内容提供者 1.关于内容提供者 1.1 什么是内容提供者 内容提供者就是contentProvider,作用有如下: 给多个应用提供数据 类似一个接口 可以和多个应用分 ...

  7. Android 四大组件之Service

    ---恢复内容开始--- 1,Service的生命周期

  8. Android成长日记-Android四大组件之Service组件的学习

    1.什么是Service? Service是Android四大组件中与Activity最相似的组件,它们都代表可执行的程序,Service与Activity的区别在于:Service一直在后台运行,它 ...

  9. 谈Android四大组件之Service篇

    Service简介 Service是Android系统中的四大组件之一,它是一种长生命周期的,没有可视化界面,运行于后台的一种服务程序.Service必须在AndroidManifest.xml中声明 ...

随机推荐

  1. Swift给每个开发者赢取500万的机会!不看一生后悔。

    [导语] Swift的横空出世,很多有想法的人已经发现其中的蕴含的巨大商机,而很多新手却只是云里雾里,只知道大家最近讨论Swift很欢乐.内行看门道,外行看热闹,说的就是这个理.如果你能把swift用 ...

  2. SoapUI-x64(app:url请求参数)

    SoapUI-x64-5.2.0_576025

  3. matlab求距一个数最近的奇(偶)数

    int_a = floor(a);minEven = int_a+mod(int_a,2); %最近偶数minOdd = int_a+1-mod(int_a,2); %最近奇数

  4. 容器适配器之queue

    转载http://blog.csdn.net/thefutureisour/article/details/7751846容器适配器容器适配器其实就是一个接口转换装置,使得我们能用特定的方法去操作一些 ...

  5. php7+apache的环境安装配置

    因为刚开始接触php,所以要对php的开发环境进行搭建. 1.首先到Apache的官网下载最新版: http://httpd.apache.org/download.cgi: 参照该网址配置Apach ...

  6. linux入门基础_centos(一)--基础命令和概念

    闲来无事干,看看2014自己整理的一些学习笔记.独乐了不如众乐乐吗! 贴出来和大家分享一下,由于篇幅比较长,分成几篇发布吧,由于是学习笔记,可能有些地方写的不是很正确或者说不详细,或者你会看到上面的课 ...

  7. 用 Android-X86 和 VirtualBox 玩安卓游戏

    目前的系统是 Ubuntu 14.04,近日玩了玩 flash 版的<皇家禁卫军:前线>塔防游戏,还是想试试原生安卓游戏的表现.发现大概有两个选择: 各类安卓模拟器:官方SDK模拟器,bl ...

  8. 本地wordpress博客系统安装搭建实践

    我们按步骤来, (1)安装XAMPP集成软件包 wordpress 的运行要求是在 php + MySQL + Apache的服务器环境,所以要先搭建该环境,我用的是XAMPP软件包,安装很方便. 下 ...

  9. sentinel.conf配置

    1.常用的配置 port 26379 # sentinel announce-ip <ip> # sentinel announce-port <port> dir /tmp ...

  10. 【BZOJ】【1004】【HNOI2008】Cards

    Burnside/Polya+背包DP 这道题目是等价类计数裸题吧……>_> 题解:http://m.blog.csdn.net/blog/njlcazl_11109/8316340 啊其 ...