分享

《Android Dev Guide》系列教程2:应用基础之组件篇1

 lifei_szdz 2012-12-26

《Android Dev Guide》系列教程2:应用基础之组件篇1

分类: Android Application 998人阅读 评论(5) 收藏 举报

《Android Dev Guide》系列教程2:应用基础之组件1

懒骨头(http://blog./iamlazybone

 

应用基础


Android是用Java语言写的,所有的Java代码和相关的资源文件被AAPT Tool 的工具打成一个Android包,后缀为apk的可运行包。这种文件专门用来发布 和安装应用程序到移动设备的。一个APK包里所有的代码都被看做一个程序。

在很多方面,每一个Android应用程序都在自己的世界(虚拟机)里单独存活。

@ 默认情况下,每个应用程序都在自己的Linux进程里。应用程序的任何一段代码需要执行时,Android都会启动这个进程,并且在处理完后要处理其他程 序时关闭这个进程。

@ 每个继承拥有自己的虚拟机,所以程序间的运行是互相隔离的。

@ 默认情况下,每个应用程序都会分到一个特殊的Linux用户ID,并被设置权限,只对应用程序自己可见和使用,当然可以对其他程序开放。

可以安排两个程序共享一个UserID,这样他们可以互相看到对方的文件,共享系统资源,并且在同一个Linux线程里运行,共享虚拟机。

组件

Android的一个核心特点就是一个应用程序可以由其他应用程序的组件来组成(在其他程序允许的前提下)。例如:如果你的程序需要显示一个图片列表并且另一个程序已经开发了合适的滚动条且允许其 他应用程序添加,那么你可以在他的滚动条基础上开发,比自己开发要方便的多。你的程序不需要合并他的代码只需要一个连接即可。相比之下,当我需要某个程序然后可以启动他时是最简单的。

想要这样的话,当这个程序的某一部分被别人用到时,系统必须能都启动一个应用程序的进程,并且实例化这些相关的Java对象,因此,与其他系统的应用程序不同的是,android程序没有一个单一的入 口程序(例如main方法),相比下,android有四种基本的组件可以被系统实例化、启动。包括:Activities、Services、Broadcast receivers、Content providers。

Activities

Activity提供了一个可视化的用户接口,例如:一个activity可以提供一个列表,供用户选择,或者在拍照时显示照片列表。一个短信程序有一个activity显示联系人列表,另一个activity可以写短信 并且选择联系人发送,别的activity可以查看以往的短信内容并且更改设置。这几个activity共同在一个用户界面里发挥着作用,他们之间互相依赖,每一个都是继承自activity基类的子类。

一个应用程序可以包含一个或者多个activity,例如刚提到的短信程序。需要多少就可以包含多少。通常,被标记的第一个activity先运行。当前activity启动完就启动下一个。

每个activity都被分配一个默认的窗口来绘制。通常是全屏,也可以比屏幕小或者浮在其他窗口上。一个activity可以利用额外的窗口,例如:在activity里探出一个让用户想用的弹出对话框,或者显 示一个给用户显示重要信息供用户选择的特殊选项。

窗口的可视内容由层式结构的view来显示,他们继承自view基类。每个view控制一个特定矩形空间内的窗口。父view控制并且组织子view 的显示。子view(上层的view)被绘制在矩形里响应用户的操作 ,从而与用户交互信息。例如可以显示一副小图片用户点击图片时响应一个事件。Android有很多现成的view可以被直接使用,包括按钮、文本框、滚动条、菜单、选择框等等。

通过Activity.setContentView()可以改变activity的显示,content view 是根视图。

Services

servers没有用户接界面,但它确实在后台不定期的运行着。例如:但用户处理其他事情时,一个service可以背景播放音乐、后台读取网络数据或者处理其他的东西并且提供给其他的activity,每一个 servers都继承自Service基类。

一个最好的例子就是媒体播放器。播放器大概需要一个或多个activity来允许用户选择歌曲并且播放。然而,播放器不必是当前活动的activity,用户可能在播放时做别的事情。播放器需要启动一个后 台来持续播放音乐。系统会一直播放这个播放器service甚至当他隐藏时。

我们可以链接到一个正在运行的service,或者启动一个没有运行的service,当连接成功时,你可以和service的进程通信。例如播放器,用户可以控制他的开始暂停重放等功能。

像activity和其他的组件一样,services运行在主线程。所以不会阻塞其他的组件或者用户界面。他们往往启动一个新的任务。可参考Process and Threads。

Broadcast receivers

Broadcast receiver这个组件只是接受receive和响应Broadcast广播通知。很多广播来源系统代码,例如通知时区已经改变、低电量、图片被选中、用户改变了语言设置,此时用户开始广播,例如,同 事其他应用程序网络数据已经下载ok可以使用了。

一个Broadcast receiver 可以响应多个广播,所有的Broadcast receiver 都继承自BroadcastReceiver基类。

Broadcast receivers 没有用户界面。然而,他们可以在接收到消息启动一个activity,或者使用notificationManager 去提醒用户。Notifications 可以通过一些方式引起用户注意:闪动背光、 震动、发声等等。通常在状态栏显示一个提示图标让用户可以查看。

Content providers 内容提供

Content providers为其他程序提供数据集,这些数据可以保存在系统文件里或者sqlite数据库里,Content providers继承自 ContentProvider基类,实现了一些标准的方法,可以 让程序检索或者改写其中的数据。程序不能直接的调用那些方法。ContentResolver不能与content provider直接通信,但可以用过ContentResolver 。ContentResolver 可以跟任何的content provider通信,可以与provider合作管理通 信进程。

更多信息查看Content Providers文档。

当有需要特定的请求需要被处理时,Android都会确保他正在运行,需要时会创建一个实例。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多