`
h416756139
  • 浏览: 365821 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android框架

阅读更多

基本框架

1、Activity前台界面,入口

2、Service 后台服务
3、组件间的事件响应: Broadcast Resolover。
4、组件间的复杂数据传递:ContentProvid。

组件的生成方式:编写继承各个组件类(接口)的类,实现相应的方法。编完后要在Android中注册IntentFilter,用来被调用。

Intent表示一个意图(一种语言规范)。原理:当开发者调用startActivity(Intent),startSerive(Intent),sendBroadcast(Intent)后,Android会在IntentFilter中查找与调用Intent匹配的IntertFilter,从而启动相应的组件。

Android应用程序由一些零散的有联系的组件组成,通过一个工程manifest绑定在一起。在manifest中,描述了每一个组件以及组件的作用。

这里有6个组件,它们是Android应用程序的基石:

? Activities(活动)

应用程序的显示层。每一个画面对应于你的应用程序,将会是Activity类的扩展。Activity使用Views去构建UI来显示信息和响应用户的行为。就桌面开发而言,一个Activity相当于一张Form。你在这章中将会学习到更多关于Activities。

? Services(服务)

Android应用程序中不可见的“工人”。 Service组件运行时不可见,但它负责更新的数据源和可见的Activity,以及触发通知。它们常用来执行一些需要持续运行的处理,当你的Activity已经不处于激活状态或不可见。你将在第8章学习怎样创建Service。

? Content(内容)

提供共享的数据存储。Content Provider(内容提供器)用来管理和共享应用程序的数据库。在应用程序间,Content Provider是共享数据的首选方式。这意味着,你可以配置自己的Content Provider去存取其他的应用程序或者通过其他应用程序暴露的Content Provider去存取它们的数据。Android设备本身包含了几个Content Provider来访问像联系人信息等有用的数据库。你将在第6章学习怎样创建和使用Content Provider。

? Intents(意图)

简单的消息传递框架。使用Intent,你可以在整个系统内广播消息或者给特定的Activity或者服务来执行你的行为意图。系统会决定那个(些)目标来执行适当的行为。

? Broadcast Receivers(广播接收器)

Intent广播的“消费者”。通过创建和注册一个Broadcast Receiver,应用程序可以监听符合特定条件的广播的Intent。Broadcast Receiver 会自动的启动你的Android应用程序去响应新来的Intent。Broadcast Receiver是事件驱动程序的理想手段。

? Notifications(通知)

用户通知的框架。Notification用来在不需要焦点或不中断它们当前Activity的情况下提示用户。它们是Service或Broadcast Receiver获得用户注意的首选方式。例如,当设备收到文本信息或外部来电时,它通过闪光,发声,显示图标或显示对话框信息来提醒你。在第8章里,你可以使用Notification来触发这些事件。


解除Android应用程序组件间的依赖关系,你可以和其他应用程序共享和交换一些个别的组件单元,例如Content Provider或Service——你的和其他的都是第三方的。

我们曾经在相关文章中对Android系统中的组件进行了详细的介绍,相信一直关注我们51CTO的编程爱好者们会对这方面的知识有一个充分的掌握。那么下面将要为大家带来的则是Android组件交互的相关方式。

Android应用中,由一些基本元素构成,但如何交互呢?

Activity->Activity: Activity之间通过Intent进行交互,可以通过直接类名直接跳转,也可以通过Intent Filter进行匹配分析,然后找到对应的Activity进行切换,这是一种松散的藕合。

Internal Activity: 在Activity 内部,View,Button 等UI组件通过设定Listener对UI事件进行监听处理。

Progress->Progress: 可以采用Braodcast Intent的方式进行与目标组件进行交互,也可以用一般的Intent。比如 Activity 调另一个Activity ,可以使用startActivity (new Intent(xx.this, yyy.class);方式。

Any -> BroadcastReceiver 由发起者发送一个PendingIntent, BroadcastReceiver的onReceive(Context context, Intent intent)被调用

Any-> ContentProvider 调用者使用 getContentResolver()方式取得 AndroidManifest.xml中配置的 ContentProvider 然后通过URi方式对其中的目标进行操作

Intent intent = getIntent();   if (intent.getData() == null) intent.setData(CONTENT_URI);   Cursor cur = getContentResolver().query(getIntent().getData(),   PROJECTION, null, null, null);   Any-> Service 由发起者 context.startService(new Intent(context, XXX.class))这种方式可以调用,也可以对 注册过的服务采用服务名称的调用方式。

程序由生到死:

选中程序文件映像,起动模块起动进程,并发送Intent到这个进程,这个进程通过Intent Filter匹配到一个Activity, 运行这个Activity的onCreate.当用户中止程序,或者由Android程序管理器由于内存等原理,按该进程优先级别,Kill掉该进程。

Activity主要包含六个方法,分别是onCreate,onStart,onResume,onPause,onStop,onDestory。

Start与Stop一对,表达的是可见与非可见这么一个过程;
Resume和Pause这一对表达的是否处于激活状态的过程。


onCreate函数:注册你要用到的变量,比如说service,receiver,这些变量是无论你的Activity是在前台还是在后台都能够被响应到的,然后调用上

面那个用来初始化的函数初始化布局信息。

onStart函数:注册一些变量。这些变量必须在Android Activity类在前台的时候才能够被响应。

onResume函数:调用一些刷新UI的函数,每当Activity调用到这里时就要刷新一下UI各控件的状态。

onPause函数:一般是做一些变量的设置,因为这个时候Activity马上就要切到后台处理,可能有些变量就要被释放掉或者状态要做些相应的调整。

onStop函数:反注册在onStart函数中注册的变量。

onDestory函数:反注册在onCreate函数中注册的变量。


主Activity和子Acitivity通信的方式有很多种这里介绍两种最简单的方法。

方法一:通过Intent来进行参数的传递,在Intent中有各种putXXX方法来存放各种参数,然后在子Activity接收到这个Intent时能够从这个Intent里

取出这个参数,利用getIntnet()。getXXXExtra()方法就可以了。

方法二:当一个主Activity想从一个子Activity接受消息时可以使用StartActivityforResult方法,例如这样启动一个Activity,

startActivityForResult(i, REQUEST_CODE); 然后在主Activity中的onActivityResult方法对requestCode进行判断来对子Android Activity类

不同的返回处理不同的情况,另外子Activity也可以利用setResult方法来设置主Activity方法中的resultCode,这样主Activity也可以根据子

Activity的不同的resultCode来处理不同的情况。

在内存不足的时候,Android是会主动清理门户的,那它又是如何判断哪个process是可以清掉的呢?文档中也提到了它的重要性排序:

1. 最容易被清掉的是empty process,空进程是指那些没有Activity与之绑定,也没有任何应用程序组件(如Services或者IntentReceiver)与之绑

定的进程,也就是说在这个process中没有任何activity或者service之类的东西,它们仅仅是作为一个cache,在启动新的 Activity时可以提高速度

。它们是会被优先清掉的。因此建议,我们的后台操作,最好是作成Service的形式,也就是说应该在Activity中启动一个Service去执行这些操作。

2.接下来就是background activity了,也就是被stop掉了那些activity所处的process,那些不可见的Activity被清掉的确是安全的,系统维持着

一个 LRU列表,多个处于background的activity都在这里面,系统可以根据LRU列表判断哪些activity是可以被清掉的,以及其中哪一个应该是最先

被清掉。不过,文档中提到在这个已被清掉的Activity又被重新创建的时候,它的onCreate会被调用,参数就是onFreeze时的那个Bundle。不过这里

有一点不明白的是,难道这个Activity被killed时,Android会帮它保留着这个Bundle吗?

3.然后就轮到service process了,这是一个与Service绑定的进程,由startService方法启动。虽然它们不为用户所见,但一般是在处理一些长时间

的操作(例如MP3的播放),系统会保护它,除非真的没有内存可用了。

4.接着又轮到那些visible activity了,或者说visible process。前面也谈到这个情况,被Paused的Activity也是有可能会被系统清掉,不过相对

来说,它已经是处于一个比较安全的位置了。

5.最安全应该就是那个foreground activity了,不到迫不得已它是不会被清掉的。这种process不仅包括resume之后的activity,也包括那些

onReceiveIntent之后的IntentReceiver实例。

在Android Application的生命周期的讨论中,文档也提到了一些需要注意的事项:因为Android应用程序的生存期并不是由应用本身直接控制的,而

是由 Android系统平台进行管理的,所以,对于我们开发者而言,需要了解不同的组件Activity、Service和IntentReceiver的生命,切记的是:如

果组件的选择不当,很有可能系统会杀掉一个正在进行重要工作的进程。

Intent:意图:包括action和一些要传递的数据的集合。
Intent的使用。
1、生成Intent
2、并设置动作标记(AndroidManifest注册IntentFilter的action)或直接指定组件:setComponent(ComponentName) ,setClass(Context, Class)。
3、设置Intent的数据,如:设置需要传递的数据putExtras()
4、执行Intent:    
   startActivity(Intent),startActivityForresult(Intent,int),startService(Intent),sendBoradcast(Intent)(需要在AndroidManifest注册IntentFilter的action)
PendingIntent扩展Intent让Intent具有启动指定组件的功能。
生成PendingIntent:
getActivity(Context context, int requestCode, Intent intent, int flags) 
getBroadcast(Context context, int requestCode, Intent intent, int lags) 
getService(Context context, int requestCode, Intent intent, int flags)

ContentProvider组件间数据共享,ContentResolver访问所有的ContentProvier
使用:
ContentProvider封装了:
1、一个要共享的数据源:数据源可以是任意数据
2、定位数据资源的URI树
通过UriMatcher将URI与一指定的标识联系起来。需要时可以通过UriMatcher的math(URI uri)返回标识
static{
 UriMatcher sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
 sUriMatcher.addURI(Diary.AUTHORITY,"diaries",DIRAIES);
 sUriMatcher.addURI(Diary.AUTHORITY,"diaries/#",DIARY_ID);
}
 3、增删改查数据源的抽象方法,方法体内先要用UriMatcher对Uri进行解析
insert(Uri uri, ContentValues values)
delete(Uri uri, String selection, String[] selectionArgs) 
query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
update(Uri uri, ContentValues values, String selection, String[] selectionArgs)

ContentResolver:
调用ContextWrapper的getContentResolver()得到所一个可以访问所有ContentProvider的resolver
调用ContentResolver的insert() delete() query() update()方法里的URI参数来定位ContentProvider转自:http://blog.csdn.net/fenghome/archive/2010/06/06/5650387.aspx

 

分享到:
评论

相关推荐

    Android框架揭秘(完整版pdf)

    Android框架揭秘 金泰延 宋亨周 朴知勋 李白 林起永 著 武传海译 《Android框架揭秘》通过对Android系统源代码的分析,主要介绍Android框架的初始化过程及主要组件的工作原理。作者直接分析和整理了Android框架的...

    Android框架体系架构.pdf

    Android框架体系架构是Android开发中的核心内容,涵盖了UI晋升、组件内核、IPC(Inter-Process Communication,进程间通信)以及数据持久化等关键知识点。本文将详细介绍这些知识,以此来深入理解Android平台的运作...

    Android框架揭秘.pdf

    《Android框架揭秘》通过对Android系统源代码的分析,主要介绍Android框架的初始化过程及主要组件的工作原理。作者直接分析和整理了Android框架的主要源代码,并详细讲解了理解框架工作原理所需的各种基础知识和构成...

    [Android框架揭秘].金泰延等.扫描版

    《android框架揭秘》通过对android系统源代码的分析,主要介绍android框架的初始化过程及主要组件的工作原理。作者直接分析和整理了android框架的主要源代码,并详细讲解了理解框架工作原理所需的各种基础知识和构成...

    ANDROID框架揭秘.pdf 带目录

    根据提供的标题“ANDROID框架揭秘.pdf 带目录”、描述“Android框架揭秘,高清扫描,带目录”以及标签“Android 框架 带目录”,我们可以推断出这份文档主要涉及Android操作系统的核心架构和技术细节。尽管部分内容...

    android框架(源代码)

    本文将深入探讨"android框架(源代码)"中的关键知识点,特别是与`TabHost`相关的实现。 Android框架是Google为开发者提供的一个开放源代码平台,它包含了操作系统、中间件和关键应用,旨在帮助开发者快速开发...

    ANDROID框架揭秘.pdf

    根据给定的文件标题“ANDROID框架揭秘.pdf”,描述“详细解析android的框架,从框架层面来剖析Android系统”,以及【部分内容】重复出现的网址提示,我们可以推断这份文档的内容应该主要围绕Android操作系统(OS)的...

    √ANDROID框架揭秘_清晰版.zip

    《ANDROID框架揭秘》是一部深入解析Android系统框架层的权威指南,旨在帮助开发者深入了解Android系统的工作原理,提升在Android平台上的应用开发能力。本书的核心内容涵盖了Android框架层的关键组件和技术,包括...

    Android框架揭秘

    《android框架揭秘》通过对android系统源代码的分析,主要介绍android框架的初始化过程及主要组件的工作原理。作者直接分析和整理了android框架的主要源代码,并详细讲解了理解框架工作原理所需的各种基础知识和构成...

    ANDROID框架揭秘(完整版)

    《ANDROID框架揭秘(完整版)》是一本深入探讨Android操作系统框架层技术的书籍,主要针对开发者和对Android系统有深入研究的技术人员。该书详细解析了Android系统的各个关键组件和机制,帮助读者理解并掌握Android...

    Android框架揭秘.

    Android框架揭秘,里面介绍了android的常用框架

    ANDROID框架揭秘

    《ANDROID框架揭秘》这篇文章聚焦于深入探讨Android框架的内部机制与关键组件,为开发者提供了一个全面理解Android系统架构的机会。Android框架是连接底层硬件抽象层(HAL)与上层应用程序的桥梁,它不仅包含了核心...

    Android框架、应用于云端软件开发

    【Android框架详解】 Android框架是Android操作系统的核心组成部分,它提供了构建和运行Android应用程序的基础。Android框架分为多个层次,包括驱动框架、核心框架和应用框架,它们共同构成了Android系统的骨架。 ...

    Android框架浅谈

    《Android框架浅谈》 **一、Android系统框架概览** Android系统框架是构建于Linux内核之上的,为移动设备提供了一套完整的操作系统环境。它由一系列的组件和服务构成,包括应用程序框架、运行库、应用程序、Linux...

    android框架布局

    本文将深入探讨Android框架布局的使用,包括各种常用布局的介绍及其特点。 首先,我们有线性布局(LinearLayout)。线性布局按照垂直或水平方向排列其子视图。可以设置`android:orientation`属性来改变布局方向。...

Global site tag (gtag.js) - Google Analytics