1.Service的应用场景

  条件:a.并不依赖于用户可视化界面(不是绝对的,如前台service就是与notification界面结合使用的)

       b.具有较长时间的运行特性。

  service的应用场景有很多,如:

  • 当用户离开音乐应用时,Music playback以Service运行;
  • 当后台文件正在下载时它以Service实现;
  • Google应用维持一个Service来从网络中获取推送服务;
  • 当一些特殊的数据同步需要进行时,Sync adapters以Service运行于后台;
  • 活动壁纸以Service运行于后台;

2.service的基本用法

  a.启动的两种方式

  • 通过startService启动
  • 通过bindService启动

  两种启动方式的区别

  • 通过startService启动的,就跟Activity无关了,在其它地方也可以关闭
  • 通过bindService启动的,是和Activity绑定的,Activity挂了,它就挂了

  b.生命周期

  

service积极活动的生命时间(active lifetime)是从onStartCommand() onBind()被调用开始,它们各自处理由startService()或 bindService()方法传过来的Intent对象。

  如果service是被开启的,那么它的活动生命周期和整个生命周期一同结束。

  如果service是被绑定的,它们它的活动生命周期是在onUnbind()方法返回后结束。

  注意:尽管一个被开启的service是通过调用 stopSelf() 或 stopService()来停止的,没有一个对应的回调函数与之对应,即没有onStop()回调方法。所以,当调用了停止的方法,除非这个service和客户组件绑定,否则系统将会直接销毁它,onDestory()方法会被调用,并且是这个时候唯一会被调用的回调方法。

  c.创建了几个实例?

  不管调用多少次都只有1个实例,因为只走了一个oncreate方法。

  在启动(startService)的时候不要忘了在某一个地方给他停止(StopService)

  同样在绑定(bindService)的时候,也要在后面给他解绑(onUnbind)

3.Service跟Activity通信

  通信方式

  • 继承Binder类

    这个方式只有当你的Acitivity和Service处于同一个Application和进程时,才可以用,比如你后台有一个播放背景音乐的Service,这时就可以用这种方式来进行通信。在Service里定义一个内部类,Binder的子类,通过这个类,把Service的对象传给Activity,这样Activity就可以调用Service里的公用方法和公用属性了,但这种方式,一定要在同一个进程和同一个Application里。

  • 使用Messenger

    上面的方法只能在同一个进程里才能用,如果要与另外一个进程的Service进行通信,则可以用Messenger。

    其实实现IPC的方式,还有AIDL,但推荐使用Messenger,有两点好处:

    1. 使用Messenger方式比使用AIDL的方式,实现起来要简单很多

    2. 使用Messenger时,所有从Activity传过来的消息都会排在一个队列里,不会同时请求Service,所以是线程安全的。如果你的程序就是要多线程去访问Service,就可以用AIDL,不然最好使用Messenger的方式。

  • 使用AIDL

     这个方法略,如果知道上面两种方法,这个方法基本很少会用到。

4.Service和Thread的关系

  Service和Thread的关系:一毛钱关系都没有

  Service和Thread的区别:

  • 正常情况下Service运行于主线程,Thread是一个子线程
  • Service的优先级高于挂起的Activity,也高于Activity所创建的Thread

  Thread的生命周期

  • 在Activity中被创建:Thread的生命周期即为整个Activity的生命周期
  • 在Application中被创建:Thread的生命周期即为整个Application的生命周期
  • 在Service中被创建:这是保证Thread最长生命周期的唯一方式,只要Service不退出,Thread就一直在后台执行

  

  

  

Android Service初步学习的笔记的更多相关文章

  1. Android NDK开发及OpenCV初步学习笔记

    https://www.jianshu.com/p/c29bb20908da Android NDK开发及OpenCV初步学习笔记 Super_圣代 关注 2017.08.19 00:55* 字数 6 ...

  2. Android安装器学习笔记(一)

    Android安装器学习笔记(一) 一.Android应用的四种安装方式: 1.通过系统应用PackageInstaller.apk进行安装,安装过程中会让用户确认 2.系统程序安装:在开机的时候自动 ...

  3. 工厂方法FactoryMethod 初步学习笔记

    一,意图   定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 二,别名   虚构造器 Virtual Constructor 三,适用性 当一个类不知道它 ...

  4. 我的Android之旅——学习、项目、心态

    本文作者: 伯乐在线 - 唐韧 .未经许可,禁止转载!欢迎分享原创到伯乐头条. 来源:唐韧 学习Android也一年多了,项目做了五六个,有大有小,有难有易.一直以来都没有好好总结过,今天周六休息,就 ...

  5. Android Service完全解析,关于服务你所需知道的一切(下)

    转载请注册出处:http://blog.csdn.net/guolin_blog/article/details/9797169 在上一篇文章中,我们学习了Android Service相关的许多重要 ...

  6. Android Service完全解析,关于服务你所需知道的一切(上)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/11952435 相信大多数朋友对Service这个名词都不会陌生,没错,一个老练的A ...

  7. Android之Fragment学习总结(1)

    对于Fragment的学习: 近日初步学习了Fragment这以特殊的组件,其依托与一个Activity,与Activity的生命周期息息相关,为其设置的视图只有当其关联到一个Activity才会起效 ...

  8. 老周的ABP框架系列教程 -》 一、框架理论初步学习

    老周的ABP框架系列教程 -- 一.框架理论初步学习   1. ABP框架的来源与作用简介 1.1  简介 1.1.1       ABP框架全称为"ASP.NET Boilerplate ...

  9. 【转】Android Service完全解析,关于服务你所需知道的一切(下) ---- 不错

    原文网址:http://blog.csdn.net/guolin_blog/article/details/9797169 转载请注册出处:http://blog.csdn.net/guolin_bl ...

随机推荐

  1. ibatis 中isNull, isNotNull与isEmpty, isNotEmpty区别

    在iBATIS中isNull用于判断参数是否为Null,isNotNull相反 isEmpty判断参数是否为Null或者空,满足其中一个条件则其true isNotEmpty相反,当参数既不为Null ...

  2. mind nerverr later(转)

    每个人都有感到失落迷惘的时候.人生用专制又霸道的方式运行着,每当我们心想一切尘埃落定.生活稳固的时候,生活总爱给我们惊喜,粉碎我们短暂的安逸,让我们不得不重新思考—_— “我走对路了吗?” “我能够赚 ...

  3. unity3d 随机生成地形之随机山脉

    利用Fractal Noise生成地形,再加上山体shader,外加雪shader Noise生成结果 noise 生成主要参考这篇文章,就不再赘述 Value3D: Perlin2D: Fracta ...

  4. (转载)ubuntu安装pyton-pip问题解决

    一.问题描述 root@ubuntu:/home/chao# apt-get install python-pip 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... ...

  5. Unity之Avatar原理

    今天花了一些时间理了理Unity的动画系统. 之前给不同模型配动画时没怎么在意,只知道用Avatar可以让一个模型使用另一个模型的动画.由于用的基本上都是人物模型,基本上没出现什么错误. 不过在用到异 ...

  6. 折腾iPhone的生活——iPhone 5s 开启 assistive touch 后卡顿的问题

    刚刚入手我的国行iPhone5s土狗灰,感觉倍棒~ 但是一上手就发现了一个问题:卡顿. 卡顿不仅体现在日常使用中,游戏中更加严重,当我玩水果忍者的时候,会发现切水果的画面都变得不流畅起来,这是拥有64 ...

  7. 在浏览器中简单输入一个网址,解密其后发生的一切(http请求的详细过程)

    在浏览器中简单输入一个网址,解密其后发生的一切(http请求的详细过程) 原文链接:http://www.360doc.com/content/14/1117/10/16948208_42571794 ...

  8. C语言学习_include<>与include""的区别

    经常会遇到两种include引用头文件的情况,其实区别很简单,如下: 一.#include< > #include< > 引用的是编译器的类库路径里面的头文件. 假如你编译器定 ...

  9. Mysql性能优化那些事

    ​    ​对于全栈而言,数据库技能不可或缺,关系型数据库或者nosql,内存型数据库或者偏磁盘存储的数据库,对象存储的数据库或者图数据库--林林总总,但是第一必备技能还应该是MySQL.从LAMP的 ...

  10. thread.wait的一个好例子

    int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); HelloThread thread; thread.star ...