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. OD 实验(十五) - 对一个程序的逆向

    程序: 打开程序 出现一个 NAG 窗口 这是主界面 点击 Exit 程序出现 NAG 窗口,然后退出 用 PEiD 看一下 是用 VC++ 6.0 写的程序 逆向: 用 OD 载入程序 跑一下程序 ...

  2. OD 快捷键

    F3 为加载一个可执行程序,进行调试分析 F2 为下断点 下完断点后,地址变为红色的 程序执行到断点处的时候会停下来 取消断点也是 F2 F4 为把程序执行到光标所在处 如果光标所在的位置在断点处之后 ...

  3. IDA Pro 权威指南学习笔记(十二) - IDA 中的注释

    注释有助于以一种更高级的方式描述汇编语言指令序列 IDA 提供了几种不同类型的注释,每种注释适用于不同的目的 使用 Edit -> Comments 命令的选项,可以为反汇编代码清单中的任何一行 ...

  4. java byte to hex

    String str; byte[] bs = null; bs =str.getBytes(); bs =str.getBytes("utf-8") java  byte to ...

  5. Linux 登陆提示文字

    /etc/issue是从本地登陆显示的信息 /etc/issue.net是从网络登陆显示的信息 /etc/motd内容由系统管理员确定,常用于通告信息,如计划关机时间的警告等 每次用户登录时,/etc ...

  6. java算法 第七届 蓝桥杯B组(题+答案) 4.分小组

    4.分小组  (代码填空) 9名运动员参加比赛,需要分3组进行预赛.有哪些分组的方案呢? 我们标记运动员为 A,B,C,... I下面的程序列出了所有的分组方法. 该程序的正常输出为:ABC DEF ...

  7. Vuex笔记/axios笔记

    每一个 Vuex 应用的核心就是 store(仓库).“store”基本上就是一个容器,它包含着你的应用中大部分的状态 (state).Vuex 和单纯的全局对象有以下两点不同: Vuex 的状态存储 ...

  8. 文件后缀与mime类型对应表

    //文档文件类型的 .ai application/postscript    .eps application/postscript    .exe application/octet-stream ...

  9. Opencv 图片直方图

    #include <iostream>#include <opencv2/opencv.hpp> using namespace std;using namespace cv; ...

  10. file_get_contents无法请求https连接的解决方法 php开启curl

    file_get_contents无法请求https连接的解决方法 方法1: PHP.ini默认配置下,用file_get_contents读取https的链接,就会如下错误: Warning: fo ...