Intent分发给Android应用程序,应用程序通IntentFilter注册自己,IntentFilter通常位于AndroidManifest.xml文件中。IntentFilter通常在应用程序的AndroidManifest.xml中使用<intent-filter>标记进行定义。从本质上说,AndroidManifest.xml文件就是一个应用程序描述文件。
应用程序的组件为了告诉Android自己能响应、处理哪些隐式Intent请求,可以声明一个甚至多个Intent Filter。每个Intent Filter描述该组件所能响应Intent请求的能力——组件希望接收什么类型的请求行为,什么类型的请求数据。比如之前请求网页浏览器这个例子中,网页浏览器程序的Intent Filter就应该声明它所希望接收的Intent Action是WEB_SEARCH_ACTION,以及与之相关的请求数据是网页地址URI格式。如何为组件声明自己的Intent Filter? 常见的方法是在AndroidManifest.xml文件中用属性< Intent-Filter>描述组件的Intent Filter。
前面我们提到,隐式Intent(Explicit Intents)和Intent Filter(Implicit Intents)进行比较时的三要素是Intent的动作、数据以及类别。
Intent分为隐式Intent,它依赖于IntentFilter并且Android环境会将该Intent发送给适当的接收者。另一种是显式Intent,你可以指定让哪个类处理Intent。
如:public void onclick(View v)
{
try{
StartActivityForResult(new Intent(v.getContext(),RefreshJobs.class),0);
}
}
对于具备用户界面应用程序来说,它至少应该有一个Activity。Activity与用户界面屏幕之间多为一对一的关系。Android应用程序通常包含多个Activity。每个Activity可显示用户界面并响应一些系统和用户发起的事件。Activity使用一个或多个View向用户显示实际的用户界面元素。
Activity的主要任务之一是显示用户界面元素,而用户界面元素将以View的形式实现,并在XML布局文件中描述。从一个Activity到另一个Activity是通过startActivity(Intent)和startActivityForResult(Intent)方法来完成的。
服务启动工作是由抽象类Context的startService(Intent)方法来启动的。
如果一个应用程序希望接收或响应全局事件,例如电话振铃或接收短信,则它必须注册为BroadcastReceiver。为了接收Intent,应用程序可以采用两种方法注册。
A应用程序可以在AndroidManifest.xml文件中实现一个<receiver>元素。如果在AndroidManifest.xml文件中注册了接收者(receiver),则它不需要运行便可被触发。当事件发生时,应用程序将在触发事件的通知后自动启动。所有这些任务将由Android操作系统来管理。
B 应用程序可以通过Context类registerReceiver方法在运行时注册。
BroadcastReceiver实现抽象法OnReceiver来处理传入的Intent。
如果一个数据管理应用程序需要将数据公开给在Android环境中运行的其它应用程序。则应该实现一个ContentProvider.或者某个应用程序组件需要访问其它应用程序中的数据 ,则需要使用其它程序中的ContentProvider。ContentResolver的openInputStream方法来访问二进制数据。
可以用StringBuilder 代替String。
AlertDialog就像MessageBox一样。
Adapter是一个集合处理程序,以View的形式返回集合中的每一项。
Application类的对象供Android内部使用,具有多种用途,可以扩展以存储全局状态信息,在该示例程序中,RestaurantFinderApplication类就是扩展了的Application类,我们将在其他活动中引用该对象,以检索已存储在该对象中的信息。有多种方法可以在活动之间传递对象,使用Application就是其中的一种方法。也可以使用公共静态成员和与Bundle类的对象关联的Intent附加属性在活动之间传递对象,此外,也可以使用Android提供的SQLite数据库,或者实现你自己的ContentProvider并数据存储到该对象中。
启动Activity时最常见的方式是用startActivity()方法,但在一些特定的情况下也可以使用另外一种形式,即startActivityforResult()方法,这两种方法都是将程序的控制权交给另一个Activity,StartActivityforResult()方法不同之外在于,当被调用的Activity结束后该方法将向当前Activity返回一个值。
每个运行在Android平台上的进程位于一个栈中。
onPause()是保存持久状态的地方。
当Activity可能被销毁时,会调用Activity类的onSaveInstanceState()方法,以便在将来某个时候能够恢复界面的状态。
ListActiviety的默认布局是一个全屏的居中选择列表,用户可从中进行选择。
Handler和Message是用于线程之间通信和计划任务的。
在程序设计领域,将字符串文体从代码中外化出去是一种司空见惯的做法。在Java中字符串外化是利用ResourceBundle或者属性文件实现的。可以定义颜色、字符串、尺寸等sring,dimen,color.
除了样式和主题以外,Android还支持一种特定的XML格式。用于将数组定义为资源。
主题可以使用与样式完全相同的<style>和〈item>结构定义。要应用一个主题,你只要将样式与整个Activity关联起来。如android:theme=”@android:style/[styleename]”.
动画
〈alpha> 定义淡出效果,其值从0.0到1.0(0.0表示完全透明)
〈scale>定义大小调整,X轴Y轴(1.0表示无变化)
〈translate>定义移动,X轴和Y轴(百分比和绝对数)
<rorate>定义旋转,可以没X轴和Y轴转动(度数)
另外,Android还提供了几个任何动画类型都可以使用的属性。
duration 持续时间,以毫秒为单位
startOffset 开始时间延迟,以毫秒为单位
interpolator 用于定义加速动画的数度曲线