Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 645|回复: 0

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

[复制链接]

该用户从未签到

发表于 2011-10-25 08:54:24 | 显示全部楼层 |阅读模式
激活组件: 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可以这样声明:
view plaincopy to clipboardprint?

<?xml version="1.0" encoding="utf-8"?>  

<manifest . . . >  

    <application . . . >  

        <activity android:name="com.example.project.FreneticActivity"  

                  android:icon="@drawable/small_pic.png"  

                  android:label="@string/freneticLabel"   

                  . . .  >  

        </activity>  

        . . .  

    </application>  

</manifest>
复制代码
<activity>元素的name属性是继承自activity基类的activity的类名,icon和label指向了资源文件。别的组件声明起来就简单的多了。服务的标签:<service>,广播接受者标签:<receiver>,内容提供商标签:<provider>。activity、services和内容提供商不在这里声明的话是不能运行的。然而,广播可以在manifest文件里声明或者动态的在代码里创建并且调用Context.registerReceiver()方法声明。Intent filtersIntent对象可以显示的定义一个目标组件。那样的话,Android就可以找到并运行它。如果目标组件没有明确的定义出来,Android会相应最佳的组件来响应这个Intent,这是通过比较<intent filters>标签里的所有组件来选择相应的。intent filters (Intent过滤器)告诉Android所有可以处理的组件。和组件的其他重要信息一样,在manifest文件里声明。下面是一个添加了两个Intents过滤器的例子:
view plaincopy to clipboardprint?

<?xml version="1.0" encoding="utf-8"?>  

<manifest . . . >  

    <application . . . >  

        <activity android:name="com.example.project.FreneticActivity"  

                  android:icon="@drawable/small_pic.png"  

                  android:label="@string/freneticLabel"   

                  . . .  >  

            <intent-filter . . . >  

                <action android:name="android.intent.action.MAIN" />  

                <category android:name="android.intent.category.LAUNCHER" />  

            </intent-filter>  

            <intent-filter . . . >  

                <action android:name="com.example.project.BOUNCE" />  

                <data android:mimeType="image/jpeg" />  

                <category android:name="android.intent.category.DEFAULT" />  

            </intent-filter>  

        </activity>  

        . . .  

    </application>  

</manifest>
复制代码
例子中的第一个过滤器是常见的。他标记了所有显示给用户让用户选择启动的组件。换句话说就是程序的入口点。是用户启动程序后最先见到的。第二个过滤器声明了可以提供(perform)的特殊数据类型。(对否?呵呵)一个组件可以有数个Intent过滤器。每一个都可以声明不同的权限。如果没有添加过滤器的话,只能使用Intent方式被启动。对于广播接受者来说,如果在代码中被创建和注册,那么直接被实例化成一个IntentFilters对象,其他的过滤器都在manifest文件里被声明。
回复

使用道具 举报

该用户从未签到

发表于 2011-10-25 08:54:27 | 显示全部楼层

Re:《Android

看看先,如果能做成PDF电子书更好.
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-25 08:54:30 | 显示全部楼层

Re:《Android

谢谢分享。。。。。。。。。。。。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-25 08:54:33 | 显示全部楼层

Re:《Android

大致了解,楼主继续努力
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-11 14:29 , Processed in 0.298242 second(s), 34 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表