【Android学习】Service&Boradcast初步
2015-10-25 17:44
1441 查看
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:
启动服务后,按Home键,服务是否还在运行?是
启动服务后,退出进程,是否服务还会运行?否
启动服务后,不用多线程,界面是否会阻塞?会
服务是个新的进程,服务是个新的线程么?
服务不是一个新的进程,也不是一个新的线程,它与当前进程绑定
Service的分类
按照启动方式分类
Started Service通过startService()启动
一旦启动,就运行在后台,即便启动它的对象(Activity)都销毁了
通常只启动,不返回值
通常网络上传或下载,操作完成后,自动停止
onStartCommand()
BoundService
bindService()来绑定
提供客户端服务器接口来启动
发生请求,得到返回值,甚至通过IPC通讯
一个服务可以被多个调用者绑定,只要有一个绑定这,服务运行,所有绑定者都退出,服务退出
onBind()
按服务性质分
Local ServiceRemote Service (不同的进程之间)
按实现方法分类
Java ServiceNative 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作用以及为何要引用:
在系统内通知和判定执行状态
系统执行状态,开机了,IF卡拔了,准备关机了, 电量低了
自定义执行状态,发消息提示更新界面
用来接收系统及自定义消息
Broadcast Reveiver接收哪些消息
常规消息(Normal broadcast),通过Context.sendBroadcast发送
排序消息(Ordered broadcast),通过Context.sendOrderedBroadcast发送
如何使用:
继承BroadcastReceiver
注意:Message、Message Queue、Message Manger
相关文章推荐
- APK文件浅析-Android
- APK文件浅析-Android
- APK文件浅析-Android
- android jni 总复习(转载)
- android--(SQLite)
- 获取android顶部状态栏高度的两种方式
- android textview获取图片
- Android-ImageView显示选择本地图片或拍照
- android中TimePicker和DatePicker的简单使用
- Android第三方图片加载库Universal Image Loader
- Android Studio配置opencv
- Android 拨打电话、查询联系人
- 5.Android support design TabLayout
- Android中判断字符串中必须包含字母或者数字
- Android代码混淆
- Android直连SQLServer
- Android jni 编程4(对基本类型二维整型数组的操作)
- Android 抽屉菜单的实现
- Android TextView文字滚动
- android studio 1.3 导入 viewpagerIndicator