【Android学习】Service&Boradcast初步

Service初步

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

重点难点
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

相关文章
相关标签/搜索