专题:http://mobile.51cto.com/aprogram-424210.htm


ApiDemo,该应用程序演示了很多API。这个示例应用程序可以作为 Android 应用程序开发的良好起点。一直想系统学习一下Android API Demo实例的朋友们,我们一起开始吧!

【编辑推荐】

  1. Android ApiDemo示例解读1:怎样创建ApiDemo示例工程

  2. Android ApiDemo示例解读2:ListActivity

  3. Android ApiDemo示例解读3:App->Activity->Animation

  4. Android ApiDemo示例解读4::Activity->Custom Dialog

  5. Android ApiDemo示例解读5:Activity->Custom Title



Android ApiDemo 惯用代码解析

一直想把Android的ApiDemo里面的Demo写出来,一来可以方便自己查看,二来方便大家能够早一点切入,从基础的控件到界面布局乃至到OPEN GL 等深入知识。

AD:


一、关于Dialog

|--- com.example.android.apis.app/AlertDialogSamples.java

里面包含了Dialog的各种用法,有10种不同的Dialog实例。

|--- com.example.android.apis.app/FragmentDialog.java

使用DialogFragment来实现Dialog,可以使用onCreateView()来创建Dialog布局,也可以使用DialogFragment类的getDialog()方法,在里面可以使用之前创建Dialog的方法,返回一个Dialog。

Android官方推荐使用DialogFragment。

二、关于Pregerence

|--- com.example.android.apis.preference

这个包里面介绍了Preference的用法,包括使用Code和XML(addPreferencesFromResource)两种方法来实现preference布局,使用setListFooter可以在底部添加一个布局(代码里面是添加一个Button在底部)

三、关于Service

创建Servcie的方法有startService()和bindServcie()两种:由startService()创建的服务的目的只是服务的启动和终止,而bindServcie()创建的的服务是为了服务的远程控制(一般都会获得一个服务对象实例).

|--- com.example.android.apis.app/LocalServcie.java

由startService()创建的服务调用完onCreate()方法后,将继续调用onStartCommand()方法,该方法有返回值,可以通过该返回值来设置Servcie被强行关闭之后是否重新再启动

通过在代码里面添加Log,得到bindServcie()的执行流程:1.客户端请求连接服务bindServcie()----->2.在绑定的服务生成之后,Android会调用服务的onBind()回调方法,用来处理服务绑定,onBind()方法返回一个IBinder对象,用于与服务通信----->3.客户端的ServcieConnection对象的onServiceConnected(cn,IBinder)方法使用第2步传递的IBinder对象,调用服务端的getService()得到服务实例.

|--- com.example.android.apis.app/RemoteServcie.java

AIDL是一种接口定义语言,用来约束两个进程之间的通信规则,供编译器生成代码,用来实现Android设备上两个进程间的通信。

以ISecondary.aidl文件为例,Android会根据AIDL文件中定义的接口自动生成绑定远程服务所需要的代码,整个bindServcie()的执行流程如下:

1.进程A调用bindServcie()请求连接RemoteService

2.进程B在服务生成之后回调onBind()方法,生成用于处理Binder IPC的IBinder对象,并返回

3.进程A调用回调方法onServiceConnected()方法,利用onBind()返回的IBinder,将其传递给IScondary.Stub.asInterface()函数,并使用它生成与RemoteService服务绑定在一起的服务代理对象ISeondary.Stub.Proxy,最后将其保存到mSecondaryService成员变量中。至此,RemoteService的ISecondary接口的绑定就完成了。

4.进程A使用服务代理对象ISeondary.Stub.Proxy,调用RemoteService服务的getPid()代理方法

5.Binder IPC:服务代理对象ISeondary.Stub.Proxy向服务Binder对象ISeondary.Stub传递Binder IPC数据

6.进程B调用RemoteService服务的getPid() Stub方法,ISeondary.Stub服务Binder对象获取Binder IPC数据后,会调用RemoteService服务里面实现的getPid() Stub方法,将服务进程ID返回给进程A



更多相关文章

  1. tcping测试服务器TCP端口
  2. WakeLock使用方法示例代码
  3. 全志A40i Android7永不休眠及不锁屏的修改方法
  4. android sensor framework
  5. android 运行时生成dex文件,并装载调用
  6. android面试题总结加强再加强版(三)
  7. Android4.4 Camera Gallery 分离
  8. Android中部分修改字体和全局修改字体的方法
  9. Android通过LIstView显示文件列表的两种方法介绍

随机推荐

  1. android sdk 版本以及对应 API level
  2. android 自签名证书生成命令
  3. Android 之获取图片及视频缩略图
  4. 获取Android设备IMEI
  5. Android onClick事件三种实现方法
  6. android 返回主菜单 Home
  7. android 简单的音乐播放
  8. Android手机开发:将按钮置于底部
  9. Android之Intent
  10. Camera驱动开发 - 基于高通MSM8660 + And