Service初步

掌握Service概念
掌握Service分类
Service开发能力具备
了解Service和intentService类的区别

重点难点
StartService和BoundService区别
Service的开发,启动和绑定
掌握Service和线程的使用区别

考核目标
什么是Service?
请描述一下Service的生命周期?
说一下Android里有哪两种Service?
Service会新开进程或者线程么?
startedService和BoundService区别

练习
使用Service来写一个音乐播放器,要求分别使用startService和bindService方法

什么是服务

服务是一个应用程序组件,能够在后台执行一个长时间运行的程序,不提供用户交互接口,即有些用时比较长的操作我们希望他在后台运行,不耽误我们当前的操作,这
就引入了Service概念。

常见的比如:访问网络,文件IO操作,大数据的数据库任务,播放音乐等。

Service在后台运行,不与用户进行交互。在默认情况下,Service运行在应用程序进程的主线程中,如果需要在Service中处理一些网络连接等耗时的操作,那么应该将这些任务放在单独的线程中处理,避免阻塞用户界面。

Q:

  1. 启动服务后,按Home键,服务是否还在运行?是
  2. 启动服务后,退出进程,是否服务还会运行?否
  3. 启动服务后,不用多线程,界面是否会阻塞?会
  4. 服务是个新的进程,服务是个新的线程么?
    服务不是一个新的进程,也不是一个新的线程,它与当前进程绑定

Service的分类

按照启动方式分类

  • Started Service
    通过startService()启动
    一旦启动,就运行在后台,即便启动它的对象(Activity)都销毁了
    通常只启动,不返回值
    通常网络上传或下载,操作完成后,自动停止
    onStartCommand()

  • BoundService
    bindService()来绑定
    提供客户端服务器接口来启动
    发生请求,得到返回值,甚至通过IPC通讯
    一个服务可以被多个调用者绑定,只要有一个绑定这,服务运行,所有绑定者都退出,服务退出
    onBind()

按服务性质分

  • Local Service
  • Remote Service (不同的进程之间)

按实现方法分类

  • Java Service
  • Native Service

Service的生命周期

  • onCreate()
  • onDestory()
  • onStartCommand()
  • onBind()

创建及使用Service步骤

Started Service

Service

  • 继承Service类实现自己的服务
  • 在AndroidManifest中注册服务
  • 启动服务startService()
  • onStartCommand
    • (返回值)
    • START_STICKY
    • START_NOT_STICKY
    • START_REDELIVER_INTENT
    • (参数值flag)
    • START_FLAG_REDELIVERY
    • START_FLAG_RETRY
  • 停止服务stopService(),stopSelf()

IntentService 异步请求的Service
异步处理服务,新开了一个线程:HandlerThread,在线程中发消息,然后接收,处理完成后,会清除线程,并且关掉服务。在做一次性操作时,用IntentService
下载文件

BoundService

三种实现方法 Local BoundService、(Remote) Messager、AIDL,这里只介绍第一种。

Local BoundService

  • 继承Service或者IntentService类实现自己的服务,定义IBinder接口
  • 在AndroidManifest中注册服务
  • 通过绑定服务bindService(),启动服务
  • 取消绑定服务unbindService()

bindService不会阻塞线程,说明它是异步操作

Q:

unbind之后是否一定会destory?

boundService 绑定(onBind)和连接 onServiceConnection哪个先执行?
onBind先执行,onServiceConnection后执行。

相似性的onUnBind和onServiceDisconneced呢?
onServiceDisconnected先执行,onUnBind后执行。

什么时候用startedService什么时候用BoundService?

什么是Binder?Linux的Binder和Android的Binder之间的区别?
Binder就是Linux下的进程间IPC通讯的一套机制,android基于它进行了封装和改进,因此成为默认的IPC机制。

startedService&BoundService区别

本质区别:
boundService 其实是有一个客户端、服务端的概念。借助Binder来通讯。

  • startedService和启动它的Activity不同生共死,Activity消亡,不影响Service,但是如果当前进程关闭,则Service消亡
  • BoundService和启动它的Activity同生共死
  • 无论是start or bind,只要service没有实例化,就都会被create,但start每次都会调用onStartCommand,而bind则如果已经绑定,就不再调用onBind了

可以通过Notification来Running Service in the foreground,等学会Notification了,再说。

Nactive Service(C++实现,NDK)

  • 什么是Native Service
  • 什么时候用到Naticei Service
  • 如何调用

Service运行如何与用户交互

  • Toast Notification
  • StatusBar Notification

如何在Service和线程之间选择?

Service是一个很方便的组件让你运行后台操作,并且不影响当前操作
当你需要在你当前操作的时候另外其一个更独立操作时候可以考虑线程,比如当前程序不关闭的情况下运行音乐,从逻辑上你认为需要一个后台操作,但跟我们现在主线程操作通讯频繁,逻辑关系紧密,那就用多线程(直接用),能够从逻辑上区分开来,就用后台服务。(跟当前页面无关,并长期运行的,则用服务,否则则用多线程)

Broadcast Recevier

学习目标

了解Android的消息机制
掌握Broadcast发送消息的两种类型
掌握BroadcastReceiver接收消息的编程

重点难点

sendOrderedBroadcast()的理解

考核目标

说说Android中发生创建两种广播分别是?以及他们的区别?

Broadcast Receiver作用以及为何要引用:
在系统内通知和判定执行状态

  1. 系统执行状态,开机了,IF卡拔了,准备关机了, 电量低了
  2. 自定义执行状态,发消息提示更新界面

用来接收系统及自定义消息
Broadcast Reveiver接收哪些消息

  • 常规消息(Normal broadcast),通过Context.sendBroadcast发送
  • 排序消息(Ordered broadcast),通过Context.sendOrderedBroadcast发送

如何使用:

  • 继承BroadcastReceiver

注意:Message、Message Queue、Message Manger

【Android学习】Service&Boradcast初步的更多相关文章

  1. Android学习Service中遇到的问题

    今天学习service,然后遇到了一个force close,log中存在这个一句话: 05-23 14:13:26.408: E/AndroidRuntime(17616): android.con ...

  2. Android学习之Activity初步

    Activity作为Android的第一步接触的概念,在学习中将初步的认识总结下来,以便后续的回顾与反思. 1.在用Android Studio生成第一个helloworld应用程序运行在手机上时,发 ...

  3. Android学习——Service(一)

    这篇博文来介绍Android另一个十分重要的组件,Service.Service和Activity很类似,区别在于它运行在后台,不可见且没有界面.Service的优先级高于Activity,当系统负载 ...

  4. Android学习——Service(二)

    今天来介绍Service的第二种使用方式,Bind方式 Bind方式启动服务 Bind方式和Start方式启动很类似,都是通过Intent来启动,不同的是,Bind方式需要传入三个参数,如下: Int ...

  5. 三、Android学习第三天——Activity的布局初步介绍(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 三.Android学习第三天——Activity的布局初步介绍 今天总结下 ...

  6. Android 学习笔记 Service服务与远程通信...(AIDL)

    PS:这一章节看的我有几分迷茫,不是很容易理解...不过还好总算是明白了一大半了...基本的迷惑是解决了... 学习内容: 1.跨应用启动服务... 2.跨应用绑定服务... 3.跨应用实现通信... ...

  7. Android 学习笔记 Service

    PS:前几篇的内容光是上代码了,也没有细细的讲解..感觉这样写很不好..因此还是多一些讲解吧... 学习内容: 1.了解Service... 2.Service的启动与停止.. 3.绑定与取消绑定Se ...

  8. Android学习笔记--服务(Service)

    1.服务概述 1.服务是Android四大组件之一,在使用上可以分为本地服务和远程服务,本地服务是指在不影响用户操作的情况下在后台默默的执行一个耗时操作,例如下载,音频播放等.远程服务是指可以供其他应 ...

  9. Android学习笔记(五一):服务Service(上)- IntentService

    转自 http://blog.csdn.net/flowingflying/article/details/7616333 对于需要长期运行,例如播放音乐.长期和服务器的连接,即使已不是屏幕当前的ac ...

随机推荐

  1. oracle打补丁步骤简介

    1.了解opatchopatch是用于维护"个别"补丁的,有人称其为interim path或是one-off patch该命令的存放位置在$ORACLE_HOME下的OPatch ...

  2. Android:ScaleType与Matrix相关

    关于ScaleType,网上介绍这个枚举对象的文章很多了,不过基本都只是介绍了它的效果.我在做可缩放移动的ImageView时,为了实现图片的缩放和拖动,需要记录图片的原始Matrix,在使用过程中发 ...

  3. Nginx 服务器开启status页面检测服务状态

    一.Nginx status monitor 和apache 中服务器状态一样.输出的内容如:  第1列: 当前与http建立的连接数,包括等待的客户端连接:2 第2列: 接受的客户端连接总数目:20 ...

  4. CentOS7.6安装JDK(Openjdk)

    安装开始: 第一步: 使用yum源安装 OpenJDK,yum install -y java-1.8.0-openjdk 第二步: 查看安装版本,java -version 运行时发现错误汇总: 错 ...

  5. C投票系统

  6. 阻塞IO,非阻塞IO,异步IO和非异步IO 的区别

    最近在研究java IO.NIO.NIO2(或者称AIO)相关的东西,有些概念还是要明确下. 按照<Unix网络编程>的划分,IO模型可以分为:阻塞IO.非阻塞IO.IO复用.信号驱动IO ...

  7. python时间戳、日期、时间转换

    1.str转时间戳 # 字符类型的时间 tss1 = '2013-10-10 23:40:00' # 转为时间数组 timeArray = time.strptime(tss1, "%Y-% ...

  8. 火狐浏览器的RestClient,接口测试,Post提交数据

    昨天需要测试接口是不是调通,api中本身已经集成了测试,但加了OAuth,api有没有添加头文件,Headers的地方,所以想用RESTClient的Post提交重新测试下,但是,调了好几个小时都没有 ...

  9. struts2 action重定向action中文乱码处理

    比如:Action方法productCategorySave()变量message,传递给Action方法productCategoryAdd(),当变量message为中文变量时,要进行编码设置,不 ...

  10. Lamber算法 & SurfaceShader自定义光照

    [SurfaceShader自定义光照] 1.在pragma中添加自定义光照函数名:  #pragma surface surf BasicDiffuse 2.实现自定义光照函数.下面就是Lamber ...