疯狂Android讲义 - 学习笔记(八)
第10章 Service与BroadcastReceiver
10.1 Service简介
Service组件也是可执行的程序,有自己的生命周期,创建、配置Service与创建、配置Activity的过程基本相似。Service一直在后台运行,没有用户界面。
10.1.1 创建、配置Service 需要2个步骤:1 定义基础Service的子类,2 在AndroidManifest.xml文件中配置Service。
Service与Activity都是从Context派生出来的,因此都可以调用Context的方法:getResource()、getContentResolver()等。
Service也定义了系列生命周期方法,与Activity相似。
10.1.2 启动和停止Service 通过Context的startService()方法启动,通过stopService方法关闭。
多次启动一个已有的Service组件将不会再回调onCreate方法,但每次启动时都会回调onStartCommend方法。
10.1.3 绑定本地Service并与之通信 通过Context的bindService方法启动,通过unbindService方法关闭
开发的Service类必须提供一个IBinder onBind(Intent intent) 方法,这个方法返回的IBinder对象会传给ServiceConnection对象。
IBinder对象相当于Service组件的内部钩子或代理对象,其他程序组件通过该IBinder对象访问Service内部的数据,从而实现客户端与Service之间的实时通信。
开发中通常采用继承Binder(IBinder的实现类) 的方式实现自己的IBinder对象。
(源码\10\10.1\BindService)
10.1.4 Service的生命周期
如果调用bindService()绑定一个已启动的Service时,系统只会把Service内部的IBinder对象传给Activity,并不会把Service生命周期绑定到给Activity,因此当改Activity调用unBindService()时,只是切断该Activity与Service之间的关联,并不会停止该Service组件。
10.1.5 使用IntentService 这是Service的子类,增加了额外的功能
Service存在的问题:Service不会专门启动一条单独的进程,Service与它所在的应用位于同一个进程中;Service也不是专门一条新的线程,不应该在Service中处理耗时的任务。
IntentService正好可以弥补Service的上述两个不足。IntentService为每一个Intent请求开启一个worker线程来处理该Intent。
当所有请求处理完成后,IntentService会自动停止,因此开发者无需调用方法来停止该Service。
扩展IntentService实现Service无须重写onBind、onStartCommand方法,只要重写onHandleIntent方法即可。
(源码\10\10.1\IntentServiceTest)
10.2 跨进程调用Service(AIDL Service)
为了实现跨进程通信(IPC), Android提供了AIDL Service。
10.2.1 AIDL Service简介
10.2.2 创建AIDL文件
10.2.3 将接口暴露给客户端
10.2.4 客户端访问AIDL Service
10.3 电话管理器(TelephoneManager)
(源码\10\10.3\TelephonyStatus 获取网络和SIM卡信息)
10.4 短信管理(SmsManager)
10.5 音频管理器(AudioManager)
10.6 振动器(Vibrator)
10.7 手机闹钟服务(AlarmManager)
10.8 接收广播消息
BroadcastReceiver本质上就是一种全局的监听器,它可以方便地实现系统中不同组件之间的通信。
10.8.1 BroadcastReceiver简介
10.8.2 发送广播
(源码\10\10.8\Broadcast)
10.8.3 有序广播
10.9 接收系统广播消息
(源码\10\10.9\LaunchService 开机自动运行的Service)
(源码\10\10.9\MonitorSms 短信提醒)
(源码\10\10.9\MonitorBattery 手机电量提示)
第13章 Android网络应用
Android完全支持JDK本身的TCP、UDP网络通信API,也可以使用ServerSocket、Socket来建立基于TCP/IP协议的网络通信。
13.1.3 使用Socket进行通信
(源码\13\13.1\SimpleClient)
13.2 使用URL访问网络资源
(源码\13\13.2\GetPostTest)
13.3 使用HTTP访问网络
13.3.1 使用HttpURLConnection
13.3.2 使用ApacheHttpClient
13.4 使用WebView视图显示网页
13.4.1 使用WebView浏览网页
13.4.2 使用WebView加载HTML代码
13.4.3 使用WebView中的JavaScript调用Android方法
疯狂Android讲义 - 学习笔记(八)的更多相关文章
- 疯狂Android讲义 - 学习笔记(七)
第8章 Android数据存储与IO Java IO的数据存储可以移植到Android应用开发上来,Android系统还提供了一些专门的IO API. Android系统内置了SQLite数据库,S ...
- 疯狂Android讲义 - 学习笔记(六)
第7章 7.1 使用简单图片 7.1.1 使用Drawable对象 7.1.2 Bitmap和BitmapFactory 7.2 绘图 7.2.1 Android绘图基础:Canvas.Paint等 ...
- 疯狂Android讲义 - 学习笔记(五)
第五章 Android使用统一的Intent对象来封装“启动意图”,不管是启动Activity.Service组件.或者BroadcastReceiver等,提供了一致的编程模型.Intent设计有点 ...
- 疯狂Android讲义 - 学习笔记(四)
Android应用通常有多个Activity,多个Activity组成Activity栈,当前活动的Activity位于栈顶.Activity相当于Java Web开发的Servlet.当Activi ...
- 疯狂Android讲义 - 学习笔记(三)
Android的事件处理 3.1 Android提供了两套事件处理机制:基于监听的事件处理.基于回调的事件处理. 3.2 基于监听的事件处理 3.2.1 监听的处理模型 主要涉及三类对象:Event ...
- 疯狂Android讲义 - 学习笔记(二)
Android应用的用户界面编程 2.1 界面编程与视图(View)组件 Android应用的绝大部分UI组件放在android.widget.android.view包及其子包中,所有UI组件都继承 ...
- 疯狂Android讲义 - 学习笔记(一)
常用开发工具的用法 android : 启动Android SDK管理器 android --help 查看具体用法 android create avd -n t10 -t 10 -b armea ...
- 【疯狂Java讲义学习笔记】【流程控制与数组】
[学习笔记]1.switch语句后的expression表达式的数据类型只能是byte.short.char.int四个整数类型.String(Java 7后才支持)和枚举类型. 2.数组的长度不可变 ...
- 【疯狂Java讲义学习笔记】【数据类型与运算符】
[学习笔记]1.8bit = 1byte,4byte = 1word.Java中的整型数据有byte(1字节),short(2字节),int(4字节),long(8字节).Java中的浮点数据有flo ...
随机推荐
- maven pom中的repository节点配置没有起作用
问题描述 昨天晚上想用spring boot快速搭建一个web开发的项目,就打开spring boot的doc,按照说明开始尝试.没想到出师未捷身先死,第一步就挂了. 以下是spring boot的配 ...
- spring快速入门(二)
一.在spring快速入门(一)的基础上,我们来了解spring是如何解决对象的创建以及对象之间的依赖关系的问题 (比如client中依赖UserAction的具体实现,UserActionImpl中 ...
- 特邀美国EMC实战专家Mark来华授课
“轻松搞定EMC-PCB和系统设计”课程介绍 本次课程特邀美国EMC领域权威专家Mark Montrose主讲,将涵盖满足产品电磁兼容性和信号完整性的基本原理.课程涉及多个领域,不仅仅针对PCB设计, ...
- C++中static数据成员详解
本文和大家分享的主要是c++中static数据成员的相关用法及源码示例,希望能帮助大家更好的学习C++. static(静态存储)数据成员 StaticTest.cpp : 定义控制台应用程序 ...
- C#设计模式系列:享元模式(Flyweight)
当频繁地从数据源读取数据时,读出的内容存在重复,那么需要使用享元模式(Flyweight)来提高内存效率,Flyweight模式将节省更多空间,共享的Flyweight越多,空间节省越大. 1.享元模 ...
- OpenCASCADE Camera
OpenCASCADE Camera eryar@163.com Abstract. OpenCASCADE introduce a new class Graphic3d_Camera for th ...
- 虚拟文件系统(VFS)
原文链接:http://www.orlion.ga/1008/ linux在不同的文件系统之上做了一个抽象层,使得文件.目录.读写访问等概念都成为抽象层概念,这个抽象层被称为虚拟文件系统(VFS). ...
- HTTP协议基础
一.介绍 Hyper Text Transfer Protocol(超文本传输协议)主要用于从WWW服务器传输超文本到本地浏览器的传送协议.已发展到1.1版本. 二.HTTP在TCP/IP参考模型的位 ...
- 感恩回馈,新鲜出炉的《ASP.NET MVC 5框架揭秘》免费赠送
上次针对<ASP.NET Web API 2框架揭秘>举办了一次评论赠书活动,很多人问我相同的活动要不要针对<ASP.NET MVC 5框架揭秘>(阅读样章)再来一次,为此我向 ...
- Attach Volume 操作(Part I) - 每天5分钟玩转 OpenStack(53)
上一节我们创建了 volume,本节讨论如何将 volume attach 到 Instance,今天是第一部分. Volume 的最主要用途是作为虚拟硬盘提供给 instance 使用.Volume ...