第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讲义 - 学习笔记(八)的更多相关文章

  1. 疯狂Android讲义 - 学习笔记(七)

    第8章 Android数据存储与IO  Java IO的数据存储可以移植到Android应用开发上来,Android系统还提供了一些专门的IO API. Android系统内置了SQLite数据库,S ...

  2. 疯狂Android讲义 - 学习笔记(六)

    第7章 7.1 使用简单图片 7.1.1 使用Drawable对象 7.1.2 Bitmap和BitmapFactory 7.2 绘图 7.2.1 Android绘图基础:Canvas.Paint等 ...

  3. 疯狂Android讲义 - 学习笔记(五)

    第五章 Android使用统一的Intent对象来封装“启动意图”,不管是启动Activity.Service组件.或者BroadcastReceiver等,提供了一致的编程模型.Intent设计有点 ...

  4. 疯狂Android讲义 - 学习笔记(四)

    Android应用通常有多个Activity,多个Activity组成Activity栈,当前活动的Activity位于栈顶.Activity相当于Java Web开发的Servlet.当Activi ...

  5. 疯狂Android讲义 - 学习笔记(三)

    Android的事件处理 3.1 Android提供了两套事件处理机制:基于监听的事件处理.基于回调的事件处理. 3.2 基于监听的事件处理 3.2.1 监听的处理模型  主要涉及三类对象:Event ...

  6. 疯狂Android讲义 - 学习笔记(二)

    Android应用的用户界面编程 2.1 界面编程与视图(View)组件 Android应用的绝大部分UI组件放在android.widget.android.view包及其子包中,所有UI组件都继承 ...

  7. 疯狂Android讲义 - 学习笔记(一)

    常用开发工具的用法 android : 启动Android SDK管理器 android --help  查看具体用法 android create avd -n t10 -t 10 -b armea ...

  8. 【疯狂Java讲义学习笔记】【流程控制与数组】

    [学习笔记]1.switch语句后的expression表达式的数据类型只能是byte.short.char.int四个整数类型.String(Java 7后才支持)和枚举类型. 2.数组的长度不可变 ...

  9. 【疯狂Java讲义学习笔记】【数据类型与运算符】

    [学习笔记]1.8bit = 1byte,4byte = 1word.Java中的整型数据有byte(1字节),short(2字节),int(4字节),long(8字节).Java中的浮点数据有flo ...

随机推荐

  1. django开发个人简易Blog—nginx+uwsgin+django1.6+mysql 部署到CentOS6.5

    前面说完了此项目的创建及数据模型设计的过程.如果未看过,可以到这里查看,并且项目源码已经放大到github上,可以去这里下载. 代码也已经部署到sina sea上,地址为http://fengzhen ...

  2. LR中的时间戳函数web_save_timestamp_param

    以前真没注意过后面看某个群有人说到这个函数一查,还真有,那么处理时间戳就简单很多了,我们经常在各种网站上看到类似于这样的时间戳 51Testing软件测试网"d bLq!uR&am ...

  3. thinphp框架的项目svn重新检出后的必备配置

    刚刚试着去了解thinkphp框架,在这里做一些笔记,后续有新的总结会更新到这里,如有错误与遗漏,望大家指正. 用thinkphp框架的项目,在用svn重新检出之后,需要进行一些基本配置,方可在本地打 ...

  4. 利用扩展事件进行调优和Troubleshooting PPT分享

        本篇主题是我在2015年中国数据库大会(DTCC)上的分享,扩展事件从2008版本出来到现在已经有6-7年,国内却很少有相关资料和使用,现在分享一下PPT,希望对大家有所帮助.       可 ...

  5. 【Win 10应用开发】Adaptive磁贴模板的XML文档结构

    在若干天之前,老周给大家讲了Adaptive Toast通知的XML模板,所以相应地,今天老周给大家介绍一下Adaptive磁贴的新XML模板. 同样道理,你依旧可以使用8.1时候的磁贴模板,在win ...

  6. Android中Bitmap,byte[],Drawable相互转化

    一.相关概念 1.Drawable就是一个可画的对象,其可能是一张位图(BitmapDrawable),也可能是一个图形(ShapeDrawable),还有可能是一个图层(LayerDrawable) ...

  7. Oracle Database 11g Express Editon介绍及安装

    一.Oracle Database 11g Express版本介绍 公司项目开发中,使用的数据库是Oracle 10g和MySQL 5.5,最新因为开发需要,需要从后台读取一些数据.使用的客户端是PL ...

  8. JavaScript sync and async(同步和异步)

    推荐四篇文章: JavaScript 是单线程的深入分析 JavaScript 运行机制详解:再谈 Event Loop JavaScript 异步编程的4种方法 JavaScript 既是单线程又是 ...

  9. Lua 学习笔记(六)迭代器

    一.迭代器的定义      “迭代器”就是一种可以遍历一种集合中所有元素的机制.在Lua中迭代器以函数的形式表示,即没掉用一次函数,即可返回集合中的“下一个”元素.迭代器的实现可以借助于闭合函数实现, ...

  10. Flume官方文档翻译——Flume 1.7.0 User Guide (unreleased version)中一些知识点

    Flume官方文档翻译--Flume 1.7.0 User Guide (unreleased version)(一) Flume官方文档翻译--Flume 1.7.0 User Guide (unr ...