- 浏览: 365821 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
驭乐MJ:
你好,我卸载rar后,按命令执行安装unrar或者是p7zip ...
Ubuntu rar 乱码问题 -
郭建雄:
不错,受用了,谢谢你的分享 !
java线程中的interrupt,isInterrupt,interrupted方法 -
zuosheng:
...
用ViewFlipper实现各种切换动画 -
lxtkong-029:
原来一直不是很清楚,看来你的文章明白了,太感谢了!
java线程中的interrupt,isInterrupt,interrupted方法 -
ihopethatwell:
嗯,看到了,要在项目中添加jni
Ubuntu 10.04安装android NDK
基本框架
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
发表评论
-
通过FutureTask设置超时,用于请求网络,执行任何异步超时任务
2013-10-10 15:53 0public class TestConnectTimeOu ... -
使用Eclipse调试Android Native Application
2013-07-08 21:31 0由于最近需要调试C++程序,以后都是暴力调试的,暴力调 ... -
Android新版NDK环境配置(免Cygwin)
2013-07-05 08:41 0前言:Android NDK r7及以上的版本已经集成 ... -
scroller 滚动效果
2013-04-25 14:22 0package com.testalaph; i ... -
点9 ondraw bitmap
2013-04-17 14:26 0private void init(Context ... -
点9 ondraw bitmap
2013-04-17 14:20 0点9图片ondraw画: private void ... -
通过activityGroup动态管理activity
2013-01-20 15:54 0// @Override // protected v ... -
scroller text view 滚动文字
2012-12-08 10:18 0package com.sc; import an ... -
android 截屏
2012-11-05 14:16 0//截屏2 private Bitmap jieping2 ... -
Android下Dialog及Activity屏蔽Home键详解
2011-12-13 11:53 0屏蔽其他键,重写onKeyDown Java代码 ... -
clipRect 介绍
2011-12-02 14:13 6729android的clip有以下两点疑问: Clip(剪切)的 ... -
android知识整理
2011-11-03 10:06 11. android单实例运行方 ... -
Android 使用junit测试
2011-08-05 16:18 954使用方式也非常的简单,只需要在AndroidManifest ... -
Android开发:调试工具集
2011-08-05 15:07 18341. 查看当前堆栈1) 功能:在程序中加入代码,使可以在log ... -
Android中attr自定义属性详解
2011-07-12 16:23 38788<LinearLayout xmlns:android= ... -
Drawable Mutations(Android Drawable 深入分析)
2011-07-11 11:08 1658Android's drawables对编写 ... -
检查系统是否安装某app
2011-07-11 10:45 965/** * Indicates whether th ... -
ImageView的scaletype属性
2011-07-07 13:21 862ImageView的属性android:scaleType ... -
Android UI --- 设置ProgressBar的颜色
2011-07-04 14:26 1285基本原理是在drawable目录中建立一个xml文件,描述一下 ... -
关于android的ListView优化
2011-06-24 16:58 11241.去除ListView的黑色间隔线 vie ...
相关推荐
Android框架揭秘 金泰延 宋亨周 朴知勋 李白 林起永 著 武传海译 《Android框架揭秘》通过对Android系统源代码的分析,主要介绍Android框架的初始化过程及主要组件的工作原理。作者直接分析和整理了Android框架的...
Android框架体系架构是Android开发中的核心内容,涵盖了UI晋升、组件内核、IPC(Inter-Process Communication,进程间通信)以及数据持久化等关键知识点。本文将详细介绍这些知识,以此来深入理解Android平台的运作...
《Android框架揭秘》通过对Android系统源代码的分析,主要介绍Android框架的初始化过程及主要组件的工作原理。作者直接分析和整理了Android框架的主要源代码,并详细讲解了理解框架工作原理所需的各种基础知识和构成...
《android框架揭秘》通过对android系统源代码的分析,主要介绍android框架的初始化过程及主要组件的工作原理。作者直接分析和整理了android框架的主要源代码,并详细讲解了理解框架工作原理所需的各种基础知识和构成...
根据提供的标题“ANDROID框架揭秘.pdf 带目录”、描述“Android框架揭秘,高清扫描,带目录”以及标签“Android 框架 带目录”,我们可以推断出这份文档主要涉及Android操作系统的核心架构和技术细节。尽管部分内容...
本文将深入探讨"android框架(源代码)"中的关键知识点,特别是与`TabHost`相关的实现。 Android框架是Google为开发者提供的一个开放源代码平台,它包含了操作系统、中间件和关键应用,旨在帮助开发者快速开发...
根据给定的文件标题“ANDROID框架揭秘.pdf”,描述“详细解析android的框架,从框架层面来剖析Android系统”,以及【部分内容】重复出现的网址提示,我们可以推断这份文档的内容应该主要围绕Android操作系统(OS)的...
《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系统框架是构建于Linux内核之上的,为移动设备提供了一套完整的操作系统环境。它由一系列的组件和服务构成,包括应用程序框架、运行库、应用程序、Linux...
本文将深入探讨Android框架布局的使用,包括各种常用布局的介绍及其特点。 首先,我们有线性布局(LinearLayout)。线性布局按照垂直或水平方向排列其子视图。可以设置`android:orientation`属性来改变布局方向。...