安卓开发

android应用开发学习

Android开发基础学习笔记(一)Android 基本架构Android的系统架构分为5层,从高到低分别是应用程序层(Applications)、应用程序框架层(Application Framework)、系统运行库层(Libralies)、运行环境层(Android Runtime)和Linux核心层(Linux Kernel)。下面这张图展示了Android系统的主要组成部分:

1、Linux 内核Android的核心系统服务基于Linux 2.6内核,例如:安全、内存管理、进程管理、网络堆栈、驱动模型。并且改过Linux内核,针对手机进行了专门的优化,主要是电源管理和进程调度方面。Linux核心层也作为硬件和软件之间的抽象层,它隐藏具体硬件细节而为上层提供统一的服务,所以只开发应用程序不需要过多了解这一层。

2、运行环境Android包含一个核心库的集合(Core Libralies),提供大部分在Java编程语言核心类库中可用的功能。android虚拟机Dailvk是基于寄存器的,所有的类都经由Java编译器编译成.class文件格式再由Android SDK中的dx工具进行二次编译成适合小内存使用的.dex文件格式再由虚拟机执行,提高了虚拟机的执行效率。Dalvik虚拟机依赖于Linux 内核提供基本功能,如线程和底层内存管理。

3、系统运行库核心类库的来源主要有两种,一种是系统类库,android为了提高框架层的执行效率,使用c/c++来实现一些关键模块,基础算法等等。一种是第三方类库,大部分是优秀开源项目的移植,如android的多媒体处理,sqlite。webkit。android会为所有移植而来的第三方类库封装一层JNI接口,以供框架层调用。

4、应用程序框架框架层是android的核心框架层主要是系统服务组成的,框架层对于android的重要性,相当于大脑对人。这些服务包括组件管理服务,窗口管理服务,电源管理服务,通话管理服务,地理信息服务中。所有服务都寄存在系统核心进程中。在运行时,每个服务都占据一个独立的线程,彼此通过进程间的通信机制发送消息和传输数据。应用层中的应用,时刻都在与这些服务打交道,了解设备信息等操作,都是在各个系统服务的支持下实现的。android应用的最大特征是基于组件的设计方式。每个应用都邮若干个组件构成,组件和组件之间并不会建立通信信道,而是通过框架层的系统,集中的调度和传递消息,这样的设计方式相当于一个中间层,该层了解所有组件的状况,可以更智能的进行协调,从而提升了整个系统的灵活性。

5、应用程序应用层主要是用于和用户进行交互的,包括系统的应用,例如电话,浏览器,联系人。也包括后续安装到设备上的第三方应用,这些统称为android应用层。

Android 组件Android的一个主要特点是,一个应用程序可以利用其他应用程序的元素(假设这些应用程序允许的话)。例如,如果你的应用程序需要显示一个图像的滚动列表,且其他应用程序已经开发了一个合适的滚动条并可以提供给别的应用程序用,你可以调用这个滚动条来工作,而不用自己开发一个。你的应用程序不用并入其他应用程序的代码或链接到它。相反,当需求产生时它只是启动其他应用程序块。

对于这个工作,当应用程序的任何部分被请求时,系统必须能够启动一个应用程序的进程,并实例化该部分的Java对象。因此,不像其他大多数系统的应用程序,Android应用程序没有一个单一的入口点(例如,没有main()函数)。相反,系统能够实例化和运行需要几个必要的组件。有四种类型的组件:

活动(Activities)服务(Services)广播接收者(Broadcast receivers)内容提供者(Content providers)然而,并不是所有的应用程序都必须包含上面的四个部分,你的应用程序可以由上面的一个或几个来组建。当你决定使用以上哪些组件来构建Android应用程序时,你应该将它们列在AndroidManifest.xml文件中,在这个文件中你可以声明应用程序组件以及它们的特性和要求。

1、活动(Activities)一个活动表示一个可视化的用户界面,关注一个用户从事的事件。例如,一个活动可能表示一个用户可选择的菜单项列表,或者可能显示照片连同它的标题。一个文本短信应用程序可能有一个活动,显示联系人的名单发送信息;第二个活动,写信息给选定的联系人;其他活动,重新查看旧信息或更改设置。虽然他们一起工作形成一个整体的用户界面,但是每个活动是独立于其他活动的。每一个都是作为Activity基类的一个子类的实现。

android.app.Activity类:因为几乎所有的活动(activities)都是与用户交互的,所以Activity类关注创建窗口,你可以用方法setContentView(View)将自己的UI放到里面。然而活动通常以全屏的方式展示给用户,也可以以浮动窗口或嵌入在另外一个活动中。有两个方法是几乎所有的Activity子类都实现的:

onCreate(Bundle):初始化你的活动(Activity),比如完成一些图形的绘制。最重要的是,在这个方法里你通常将用布局资源(layout resource)调用“setContentView(int)方法定义你的UI,和用`findViewById(int)在你的UI中`检索你需要编程地交互的小部件(widgets)。`setContentView`指定由哪个文件指定布局(main.xml),可以将这个界面显示出来,然后我们进行相关操作,我们的操作会被包装成为一个意图(Intent),然后这个意图对应有相关的activity进行处理。“onPause():处理当离开你的活动时要做的事情。最重要的是,用户做的所有改变应该在这里提交(通常ContentProvider保存数据)。一个应用程序可能只包含一个活动,或者像刚才提到的短信应用,它可能包含几个活动。这些活动是什么,以及有多少,当然这取决于它的应用和设计。一般来讲,当应用程序被启动时,被标记为第一个的活动应该展示给用户。从一个活动移动到另一个活动由当前的活动完成开始下一个。

每一个活动都有一个默认的窗口。一般来讲,窗口会填满整个屏幕,但是它可能比屏幕小或浮在其他窗口上。一个活动还可以使用额外的窗口——例如弹出式对话框,或当一用户选择屏幕上一个特定的项时一个窗口显示给用户重要的信息。

窗口的可视内容是由继承自View基类的一个分层的视图—对象提供。每个视图控件是窗口内的一个特定的矩形空间。父视图包含和组织子女视图的布局。叶子视图(在分层的底层)绘制的矩形直接控制和响应用户的操作。因此,一个视图是活动与用户交互发生的地方。例如,一个视图可能显示一个小的图片和当用户点击图片时发起一个行为。Android有一些现成的视图你可以使用,包括按钮(buttons)、文本域(text fields)、滚动条(scroll bars)、菜单项(menu items)、复选框(check boxes)等等。

通过Activity.setContentView() 方法放置一个视图层次在一个活动窗口中。内容视图(content view)是层次结构的根视图对象。层次结构如下图所示:

Activity.setContentView() 方法:public void setContentView (int layoutResID):根据布局资源设置活动的界面。 资源将被夸大,添加布局资源文件中所有的最高层的视图( top-level views )到活动.2、 服务(Services)一个服务没有一个可视化用户界面,而是在后台无期限地运行。例如一个服务可能是播放背景音乐而用户做其他一些事情,或者它可能从网络获取数据,或计算一些东西并提供结果给需要的活动(activities)。每个服务都继承自Service基类。

每个服务类在AndroidManifest.xml中有相应的声明。服务可以通过Context.startService()和Context.bindService()启动。

一个典型的例子是一个媒体播放器播放一个播放列表中的歌曲。该播放器应用程序将可能有一个或多个活动(activities),允许用户选择歌曲和开始播放。然而,音乐播放本身不会被一个活动处理,因为用户希望保持音乐继续播放,当用户离开播放器去做其他事情时。为了保持音乐继续播放,媒体播放器活动可以启动一个服务运行在后台。系统将保持音乐播放服务运行,甚至媒体播放器离开屏幕时。

可以连接到(绑定到)一个持续运行的服务(并启动服务,如果它尚未运行)。连接之后,你可以通过服务暴露的接口与服务交流。对于音乐服务,这个接口可以允许用户暂停、倒带、停止和重新播放。

像活动(activities)和其他组件一样,服务(services)运行在应用程序进程中的主线程中。因此,他们将不会阻止其他组件或用户界面,他们往往产生其他一些耗时的任务(如音乐播放)。

3、广播接收者(Broadcast receivers)一个广播接收者是这样一个组件,它不做什么事,仅是接受广播公告并作出相应的反应。许多广播源自于系统代码,例如公告时区的改变、电池电量低、已采取图片、用户改变了语言偏好。应用程序也可以发起广播,例如为了他其他程序知道某些数据已经下载到设备且他们可以使用这些数据。

一个应用程序可以有任意数量的广播接收者去反应任何它认为重要的公告。所有的接受者继承自BroadcastReceiv

Similar Posts

发表评论

邮箱地址不会被公开。 必填项已用*标注