应用基础<一>
Android应用是用Java语言来编程的。被编译过的java代码同其它应用中涉及到的数据和资源文件被“aapt 工具”一起绑定到android后缀是“.apk”的档案包。这个文件为应用程序的发布和在设备上安装应用提供了一种手段。这个文件就是用户下载到设备上的那个文件。所有的代码在一个“.apk”文件中被认为是一个应用。
在很多情况下,每一个android应用运行在自己独立的空间:
1. 默认情况是,每一个应用运行在它自己独立的Linux进程空间。Android在应用程序代码需要被执行的时候会开启进程,并且在进程不在需要和其它应用需要系统资源的时候在关闭当前进程。
2. 每一个进程有它自己的虚拟空间,因此应用程序代码运行在和其它应用代码相独立的空间。
3. 每一个应用默认被分配唯一的一个Linux用户ID。被赋予的权限是应用程序的文件只对那个用户和应用本身可见,但是也还是有其它方式可以将文件暴露给其它应用程序。
可以让两个应用程序共享相同的用户ID,在这种情况下它们可以互相看见对方的文件。为了保护系统资源,具有相同用户ID的的应用可以运行在具有相同的linux进程和共享相同的虚拟机。
应用组件
在android上一个很重要的特征就是一个应用程序可以使用其它应用的元素(得到其它应用的许可)。例如,你的应用需要显示一个可以滑动的一列图片,然而其它的应用已经开发好了一个可以滑动的并且可以被其它应用程序访问组件,你就可以调用哪个组件来做些事情,而不是你自己要重新开发一个。你的应用程序不需要同其它的应用程序的代码进行协同工作或者说是要相关联。而是,简单的启动其它应用程序的某一部分,当你需要的时候。
为了完成你的工作,系统必须要启动一个 应用进程在需要的时候,并且为那些部分初始化Java对象。因此,不像应用在其它的平台上,android在每一个应用程序里不会有一个唯一的入口点(例如,没有main方法)。但是,它们有系统可以初始化和在需要时就可以运行的最基本的组件。有四种类型的组件:

活动

一个活动展现了一个可视化的用户可以集中操作的界面。例如,一个活动可以展现用户可以从一列的菜单选择的项目或者是显示和字幕相匹配的照片。一个文本信息的应用程序包含一个可以显示要发送的信息的活动,第二个是供选择联系人的写信息活动,其它的活动是查看历史信息和更改设置。尽管它们工作在一起形成一个具有粘合性的用户界面,但是每一个活动都是独立于其它活动的。每一个活动都是去实现一个Activity的子类。
一个应用也许只由一个活动组成,或者像刚刚提到的文本信息应用,也可能包含多个活动。活动是哪些,到底该有多少这个这当然取决于应用的设计。通常,在活动有一个活动会被标记为第一个会展现在用户面前的活动。从一个活动到另外一个是通过当前的活动去启动下一个。
每一个活动有一个默认的绘制窗口。典型的情况是窗口在填充屏幕的时候,却比屏幕小或者浮动在其它的窗口智商。一个活动也能使用那个其它的窗口,例如,需要用户响应的位于活动中央的弹出对话框,或者是给用户展现重要信息的用户会从屏幕中选择某部分的窗口。
视图层是通过Activity.setContentView() 方法放在活动的窗口里面的。视图内容是位于视图层顶部的视图对象。

服务

服务没有用户界面,而是以不确定的时间周期在后台运行。例如,一个服务可能播放后台音乐当用户打算做其他事情的时候。或者是从网络下载数据又或者是做一些计算工作然后把结果返回需要它的活动。每一个服务都继承与Service基类。
一个很好的例子就是多媒体播放器从播放列表里面播放音乐。播放器可能有一个或者更多的活动可以让用户选择来播放音乐。尽管如此,音乐播放本身将不可能受活动的控制,因为用户希望在他们离开播放器开始干其它事情之前音乐可以一直播放。为了让音乐一直播放,多媒体活动可以开启一个在后台运行的service。在活动开启service离开屏幕之后系统将会一直让音乐播放一直运行。
不能连接或者绑定一个已经在运行的service。一旦连接上,你可以通过一个service暴露的接口和之通信。再到音乐service,这个接口可以让用户暂停,回播,停止和重新播放音乐。
像活动和其它的组件一样,service运行在应用进程的主线程中。因此,它们不可以阻塞用户接口的其它组件,它们通常会孵化出线程来处理一些耗时的任务。

广播接收者

广播接收者组件只接收广播,并做相应处理。系统代码中内置有大量的广播,比如,时区改变,电量低,照完一张相,或者是用户改变了语言偏好。应用程序也能创建广播,例如,可以让应用程序知道数据已经被下载下来并且可供使用。
应用程序可以拥有无限制的广播接收者来接收它认为重要的广播。所有的接收机继承于BroadcastReceiver基类。
广播接收者不会显示用户界面。但是,他们可能将开启一个新的activity来对他们接收到的信息作为反馈。或者是使用NotificationManager来告知用户。通知可以通过很多种方式来获取用户的哦注意:闪烁背光灯、震动设备、播放音乐等。典型的做法是在状态栏里面显示一个用户可以打开并获取信息的图标。

内容提供者

内容提供者使得应用程序自身的数据为其他应用所访问。数据可以被存储在文件系统里面,在sqlite数据库里面,或者是任何可以有意义的地方。内容提供者继承于ContentProvider基类,并实现了一系列标准的方法使得其他应用程序可以获取和存储数据。但是,应用程序不能直接调用这些方法。ContentResolver可以直接和内容提供者会话,它同内容提供者协同管理相关的进程间通信。

更多相关文章

  1. Android(安卓)API Guides---Building Accessibility Services
  2. Android(安卓)对用户名密码进行加密操作存储在本地
  3. 最热的前100的Android应用程序已被黑客入侵
  4. Android全局异常处理(捕获异常,不弹出程序崩溃)
  5. 我理解的 iOS 与 Android(安卓)的区别
  6. Android(安卓)API Guides---Verifying App Behavior on the Andr
  7. Android应用程序需不需要手动退出? - 阿智的日志 - 网易博客
  8. Android(安卓)给应用程序的icon添加未读消息个数提示(红圈内数字)
  9. Android(安卓)API Guides---Location and Sensors APIs and Maps

随机推荐

  1. 关于word导出功能的一些技巧步骤提高效率
  2. 完整部署CentOS7.2+OpenStack+kvm 云平台
  3. 厉害了,股票K线图还能这么画!
  4. 【MOS】Index Rebuild Is Hanging Or Tak
  5. Mac上小巧且功能全面的闹钟与睡眠计时软
  6. 日志分析ELK平台部署第一节
  7. 如何打印菱形
  8. funsionchart水印问题
  9. java类的成员初始化顺序和初始化块顺序
  10. 【微信公众号】【深入解析】DRM和read-mo