<疯狂Android讲义>阅读笔记(5)

Service 
开发activity需要两个步骤:1、开发activity子类,2、在清单配置文件中配置acitivty,开发service也需要两个步骤:
1、定义一个继承service的子类     
2、在清单配置文件中配置该service
service与activity还有一点相似之处,它们都是从context派生出来的。

与activity相似的是,service也定义了系列生命周期方法,如下所示。
1、abstract IBinder onBind(Intent intent):该方法是service子类必须实现的方法。该方法返回一个IBinder对象,应用程序可通过该对象与service组件通信。
2、void onCreate(): 当该service第一次被创建后将立即回调该方法
3、void onDestory();当该service被关闭之前将会回调该方法。
4、void startCommand(Intent intent,int flags,int startid):该方法的早期版本是void  onstart(Intent intent ,int startid),每次客户端调用startservice(Intent )方法调service都会回调该方法
5、boolean onUbinde(Intent intent):当该service上绑定的所有客户端都断开连接时,将会回调该方法。

如果service 和访问者之间需要进行方法调用或数据交换,则应该使用bindService()和unbindService()方法启动、关闭服务。
Context的bindService()方法的完整方法签名为bindService(Intent services ,ServiceConnection conn ,int flags),该方法的三个参数的解释如下。
1、service :该参数通过intent指定要启动的service 
2、conn :该参数是一个serviceConnection对象。该对象用于监听访问者与service之间的连接情况。当访问者与service之间连接成功时将回调该serviceConnection对象的onServiceConnection(ComponentName name ,IBinder service )方法:当访问者与service之间断开连接时将回调该serviceConnection对象的onServiceDisConnected(ComponentName name)方法。
3、flags:指定绑定时是否自动自动创建service(如果service还未创建)。该参数可指定为0(不自动创建)或BIND_AUTO_CREATE(自动创建)
当开发Service类时,该service类必须提供一个IBinder onBind(Intent intent)方法,在绑定本地service的情况下,onBind(Intent intent)方法所返回的IBinder对象将会传给ServiceConnection对象里onServiceConnected(ComponentName name ,IBinder service )方法的service参数,这样访问者就可通过该IBinder对象与service进行通信。

AIDL
ADIL接口定义语言的语法十分简单,这种接口定义语言并不是一种真正的编程语言,它只是定义两个进程之间的通信接口,因此语法非常简单,但存在如下几点差异:
1、AIDL定义接口的源代码必须以.aidl结尾。
2、AIDL接口中用到的数据类型,除了基本类型、String、list、Map、CharSequence之外,其他类型全都需要导包,即使它们在同一个包中也需要导包。

开发人员定义的AIDL接口只是定义了进程之间的通信接口,Service端、客户端都需要使用SDK安装目录下的platform_tool子目录下的adil.exe工具为该接口提供实现。

与绑定本地service不同的是,本地service的onBinde()方法会直接把IBinder对象本身传给客户端的ServiceConnection的onServiceConnected方法的第二个参数。但远程Service的onBinde()方法只是将IBinder对象的代理传给客户端的ServiceConnection的onServiceConnected方法的第二个参数。

TelephonyManager是一个管理手机通话状态、电话网络信息的服务类,该类提供了大量的getXxx方法来获取电话网络的相关信息。

安卓没有对外公开挂断电话的API,如果需要挂断电话,必须使用AIDL与电话管理服务进行通信,并调用服务中的API实现结束通话。

PendingIntent是对Intent的包装,一般通过调用PendingIntent的getactivity(),getService(),getBroadcastReceiver()静态方法来获取PendingIntent对象。与Intent对象不同的是:PendingIntent通常会传给其他应用组件,从而由其他应用程序来执行PendingIntent所包装的Intent。

AlarmManager通常的用途就是用来开发手机闹钟,但实际上它的作用不止于此。它的本质是一个全局的定时器。AlarmManager可在指定时间或指定周期启动其他组件(包括 activity,Service,BroadcastReceiver)
一旦程序获取了AlarmManager对象之后,就可调用它的如下方法来设置定时启动指定组件。

void set(int type,long triggerAtTime,PendingIntent opertaion),设置在triggerAtTime时间启动由operation参数指定的组件。其中第一个参数指定定时服务的类型,该参数可接受如下值:
1、elapsed_realtime:指定从现在开始时间过了一定时间后启动operation所对应的组件。
2、elapsed_realtime_wakeup:指定从现在开始事件过了一定时间后启动operation所对应的组件。即使系统关机也会执行operation所对应的组件。
3、RTC:指定当系统调用System.currenTimeMills()方法返回值与triggerAtTime相等时启动operation所欲i定要过得组件。
4、RTC_WAKEUP:指定当系统调用System.currentTmeMills()方法返回值与triggerAtTime相等时启动operation所对应的组件。即使系统关机也会执行operation所对应的组件。
void setInexactRepeating(int tye,long triggerAtTime,long interval,PendingIntent operation):设置一个非精确的周期性任务,例如我们设置Alarm每个小时启动一次,但系统并不一定总在每个小时的开始启动Alarm服务。
void setRepeating(int type,long triggerAtTime,long interval ,PendingIntent operation):设置一个周期性执行的定时服务。
void cancel(PendingIntent operation ):取消AlarmManager 的定时服务


BroadcastReceiver用于接受程序(包括用户开发的程序和系统内建的程序)所发出的Broadcast Intent ,与应用程序启动Activity,Service相同的是,程序启动BroadReceiver也需要两部。
1、创建需要启动的BroadcastReceiver的Intent。
2、调用Context的sendBroadcast()或sendOrderedBroadcast()方法来启动指定的BroadcastReceiver。
当应用程序发出一个Broadcast Intent 之后。所有匹配该Intent的BroadcastReceiver都有可能被启动。
由于BroadcastReceiver本质上属于一个监听器,因此实现BroadcastReceiver的方法也十分简单,只要重写BroadcastReceiver的onReceive(Context context,Intent intent)方法即可。
一旦实现了BroadcastReceiver,接下里就应该指定该BroadcastReceiver能匹配的Intent,此时有两种方式:
1、使用代码进行指定,调用BroadcastReceiver的context的registerReceiver方法指定。
2、在安卓配置文件中进行配置。
如果BroadcastReceiver的onReceive方法不能在10秒内执行完成,安卓会认为该程序无响应。所以不要在BroadcastReceiver的onReceive()方法里执行一些耗时操作,否则会弹出ANR(Application No Response)的对话框

Broadcast被分为如下两种
1、normal Broadcast(普通广播):是完全异步的,可以在同一时刻被所有接受者接收到,消息传递的效率比较高,但缺点是接受者不能将处理结果传递给下一个接受者,并且无法终止Broadcast Intent的传播
2、Ordered Broadcast(有序广播):有序广播的接受者将按预先声明的优先级依次接受广播。优先级别声明在《intent -filter》元素的android:priority属性中,数越大级别越高。取值范围为-1000—1000。Ordered Broadcast接受者可以终止Broadcast Intent的传播,Broadcast Intent一旦终止,后面的接受者就无法接收到Broadcast。

开机自动运行的service
前面已经介绍了多个程序,需要使用开机自动运行的service。例如监听用用户来电、监听用户短信、拦截黑名单电话
为了让service随系统启动自动运行,可以让BroadcastReceiver监听action为ACTION_BOOT_COMPLETED常量的Intent
然后在BroadcastReceiver中启动特定Service即可。

mediaplayer存在如下缺点:
1、资源占用量较高、延迟时间较长
2、不支持多个音频同时播放
安卓还提供了soundpool来播放音效,soundpool使用音效池的概念来管理多个短促的音效,例如它可以开始就加载20个
音效,以后在程序中按音效的ID进行播放。
soundpool主要用于播放一些较短的声音片段,与mediaplayer相比,soundpool的优势在于CPU资源占用量低和反应
延迟小。另外,soundpool还支持自行设置声音的品质、音量、播放比率等参数。
soundpool提供了一个构造器,该构造器可以指定它总工支持多少个声音(也就是池的大小)、声音的品质等。
构造器函数如下:
soundpool(int maxStreams,int streanmType,int srcQuality):第一个参数指定支持多少个声音,第二个参数指定声音类型
;第三个参数指定声音品质。
一旦得到了SoundPool对象之后,接下来就可调用soundpool的多个重载的load方法加载声音。

Android应用提供了Camera来控制拍照,使用Camera进行拍照也比较简单,按如下步骤即可:
1、调用Camera的open()方法打开相机
2、调用Camera的getParameters()方法来获取拍照参数。该方法返回一个Camera.Parameters对象。
3、调用Camera的Parameters对象方法设置相机参数
4、调用Camera的setParameters(),并将Camera.Parameters对象作为参数传入,这样即对相机的拍照参数进行控制。
5、调用Camera的startPreview()方法开始预览取景,在预览取景之前需要调用Camera setPreviewDisplay(surfaceHolder holder)
方法设置使用哪个sufaceView来显示取景图片
6、调用Camera的takePicture方法来进行拍照
7、结束程序时,调用Camera的stopPreview()结束取景预览,并调用release方法释放源。

OpenGl的全称是 Open Graphics Library。即开房的图形库接口。它定义了一个跨编程语言、跨平台的编程接口的规范
它主要用于三维图形(实际上二维图形也可以)编程。

在安卓中使用OpenGL ES需要三个步骤。
1、创建GLSurface View 组件,使用activity来显示GLSurfaceView组件。
2、为GLSurfaceView组件创建GLSurfaceView.Render实例,实现GLSurfaceView.Render类是需要实现该接口里的三个
方法
abstract void onDrawFrame(GL10 gl):Renderer对象调用该方法绘制GLSurface View的当前帧
abstract void onSurfaceChanged(GL10 gl,int width ,int height):当 GLSurfaceView的大小改变时回调该方法
abstract void onSurfaceCreated(GL10 gl ,EGLConfig config):当GLSufaceView被创建时回调该方法。
3、调用GLSurface View组件的setRenderer()方法指定Renderer对象,该Renderer对象将会完成GLSurfaceView里的
3D图形绘制。

IP协议是Internet上使用的一个关键协议,它的权衡是Internt Protocl,即Internet协议,简称IP协议。通过使用IP协议
使Internet成为一个允许连接不同类型的计算机和操作系统的网络。
尽管计算机通过安装IP软件,保证了计算机之间可以发送和接受数据,但IP协议还不能解决数据分组在传输过程中
可能出现的问题。因此若要解决可能出现的问题,连接上网络的计算机还需要安装TCP协议来提供可靠并且无差错的通信
服务。
TCP协议被称作一种端对端协议。这是因为它为两台计算机之间的连接起了重要作用。TCP协议会让两台计算建立一个连接:
用于发送和接受数据的虚拟链路。
TCP协议负责收集这些信息包,并将其按适当的次序放好传送,在接收端收到后再将其正确地还原。TCP协议保证了数据包
在传送中准确无误。TCP协议使用重发机制:当一个通信实体发送一个消息给另一个通信实体后,需要收到另一个通信实体
的确认消息,如果没有收到另一个通信实体的确认消息,则会再次重发刚才发送的消息。
1、URI是统一资源标识符,是一个用于标识某一互联网资源名称的字符串。 该种标识允许用户对任何(包括本地和互联网)的资源通过特定的协议进行交互操作。URI由包括确定语法和相关协议的方案所定义。由是三个组成部分:访问资源的命名机制、存放资源的主机名、资源自身的名称,由路径表示。
比如文件的URL,服务器方式用file表示,后面要有主机IP地址、文件的存取路径(即目录)和文件名等信息。有时可以省略目录和文件名,但“/”符号不能省略。
例:file://a:1234/b/c/d.txt代表获取资源使用ftp协议,资源目标是a主机的1234端口的b目录下的c目录下的d.txt。
2、URL是统一资源定位,是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。

WebService用于消除不同平台、不同语言之间的实现差异,将现有的应用程序发布开放式服务,从而允许互联网上
任何地方、任何平台,任何语言的应用来访问该服务,通过使用webservice,我们将应用程序转换为网络应用程序。

webservice主要的设计思想是:充分利用web分布式变成模型的松散耦合性,允许各种平台、各种变成语言的应用可以
交换数据,可以无缝地整合在一起。也就是说,webservice提供了一种建立分布式应用的平台,使得不同操作平台上
、不同语言实现的软件,所有已开发、部署的软件。
web service有如下特点。
1、自包含性。使用者只要一种支持web和XML的编程语言即可:webservice服务提供者则只需要web
服务器和SOAP服务器。
2、自描述性:web service是自描述的,客户端和服务器是无须关心除请求和响应消息的内容和格式
之外的任何内容,消息格式和消息内容一起传播,无须外部程序辅助。

json主要有如下两种数据结构。
1、由Key_value对组成的数据结构,这种数据结构在不同的语言中有不同的实现。例如,
在javascript中是一个对象,在java中是一种Map结果,在C语言中则是一个struct。在其他语言中可能有record、
dictionary,hash table 等。
2、有序集合。这种数据结构在不同语言中,可能有List,vetor,数组和序列等实现。
json创建对象OBJECT时,总以{开始,以}结束,对象的每个属性名和属性值以英文冒号:开始,多个属性定义
之间以英文逗号,隔开。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值