《Android Dev Guide》系列教程3:应用基础之组件篇2

《Android Dev Guide》系列教程3:应用基bu础之组件篇2

懒骨头(http://blog.csdn.com/iamlazybone

激活组件: intents

 

当ContentResolver接收到一个请求时,运行content providers。其他三个组件activities、services、broadcast receiver被Intents异步消息启动。intent 里包含着所传递消息的内容。对于activity和services来说,intents定义了请求,指定了目标数据的URI。例如,可以让发送一个请求让用户接受或者输入一些文本信息。对broadcast receivers来说,intents定义了一些声明的事件(?),例如:他可以在相机的按钮被按下时发出一些信息。

 

下面是每个组件类型对应的启动方法

 

@ Context.startActivity() 和 Activity.startActivityForResult()方法可以启动一个activity。activity可以查看启动他的的intent,通过调用getIntent()方法。Android 系统调用onNewIntent()方法来传递intents。

一个activity经常会启动下一个activity。使用startActivityForResult() 代替 startActivity()方法可以从启动的activity获取一些返回值。例如,可以启动一个activity让用户选择一张图片并且返回所选的图片,被传递回来的数据被送到前一个activity的onActivityResult()方法里。

 

@ Context.startService()可已启动一个service。Android通过service的onStart()方法传递intent对象。类似的,intent可以传递至Context.bindService()来获取一个正在运行的服务的句柄,这个服务可通过onBind()方法获取这个intent对象(如果服务没有启动可以通过bindService()来启动服务)。例如,一个activity可以很容易的建立一个到音乐播放服务的连接,他可以提供给用户一些控制音乐播放器的借口。activity可以调用bindService()方法来建立连接,然后调用已经定义的关于播放器的一些方法。

 

@ 应用程序可以通过传递intent来初始化一个Broadcast广播,相关方法:Context.sendBroadcast()、Context.sendOrderedBroadcast()、Context.sendStickyBroadcast() ,activity会调用所有对此广播关注的广播接收器,然后将intent传递给这些方法。

 

关闭组件

 

只有当内容提供商从内容接收者接收到一个请求时才会启动。广播消息接受者只有当接收到一个广播消息时才会被启动。所以他们不需要手动关闭。

 

activity则另当别论,他们提供给用户界面,他们和用户保持长时间的对话并且保持活跃状态,甚至空闲时,仍然保持联系。类似的,services也会运行很长一段时间。所以Android提供关闭activity和services的一些方法:

 

@ finish()会关闭activity,那些被startActivityForResult()方法启动的activity可以通过finishActivity()关闭。

@ services 可以通过 stopSelf()和Context.stopService() 方法被关闭。

 

当系统不再使用他们或者没有足够内存世,系统可以自行关闭一些组件,后面的章节会讨论这种情况。

 

 

manifest 文件

 

在Android启动一个应用组件前,必须让activity知道那些组件的存在,所以应用程序必须在manifest文件里声明自己的组件,并把manifest文件打包到Android 包里。apk文件包含程序的代码、文件和资源。

 

manifest是一个结构化的xml文件,被命名为AndroidManifest.xml,里面声明了应用的组件、一些除了系统默认库的用户自定义库和程序希望被授予的一些权限。

 

manifest主要任务是告诉Android应用程序的部件。例如,activity可以这样声明:

 

 

 

<activity>元素的name属性是继承自activity基类的activity的类名,icon和label指向了资源文件。

 

别的组件声明起来就简单的多了。服务的标签:<service>,广播接受者标签:<receiver>,内容提供商标签:<provider>。

activity、services和内容提供商不在这里声明的话是不能运行的。然而,广播可以在manifest文件里声明或者动态的在代码里创建并且调用Context.registerReceiver()方法声明。

 

Intent filters

 

Intent对象可以显示的定义一个目标组件。那样的话,Android就可以找到并运行它。如果目标组件没有明确的定义出来,Android会相应最佳的组件来响应这个Intent,这是通过比较<intent filters>标签里的所有组件来选择相应的。intent filters (Intent过滤器)告诉Android所有可以处理的组件。和组件的其他重要信息一样,在manifest文件里声明。

下面是一个添加了两个Intents过滤器的例子:

 

 

 

例子中的第一个过滤器是常见的。他标记了所有显示给用户让用户选择启动的组件。换句话说就是程序的入口点。是用户启动程序后最先见到的。

 

第二个过滤器声明了可以提供(perform)的特殊数据类型。(对否?呵呵)

 

一个组件可以有数个Intent过滤器。每一个都可以声明不同的权限。如果没有添加过滤器的话,只能使用Intent方式被启动。

 

对于广播接受者来说,如果在代码中被创建和注册,那么直接被实例化成一个IntentFilters对象,其他的过滤器都在manifest文件里被声明。

 

后记:

自己都觉得语句不通~原谅骨头吧~给大家个找错的机会~哈哈~

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值