ZNDS智能电视网 推荐当贝市场

TV应用下载 / 资源分享区

软件下载 | 游戏 | 讨论 | 电视计算器

综合交流 / 评测 / 活动区

交流区 | 测硬件 | 网站活动 | Z币中心

新手入门 / 进阶 / 社区互助

新手 | 你问我答 | 免费刷机救砖 | ROM固件

查看: 15381|回复: 0
上一主题 下一主题
[教程]

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-8-28 16:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
>
激活组件: 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 filtersIntent对象可以显示的定义一个目标组件。那样的话,Android就可以找到并运行它。如果目标组件没有明确的定义出来,Android会相应最佳的组件来响应这个Intent,这是通过比较<intent filters>标签里的所有组件来选择相应的。intent filters (Intent过滤器)告诉Android所有可以处理的组件。和组件的其他重要信息一样,在manifest文件里声明。下面是一个添加了两个Intents过滤器的例子:   
  1. 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文件里被声明。   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   

上一篇:《Android Dev Guide》系列教程5:Android进程和线程
下一篇:《Android Dev Guide》系列教程1:什么是Android?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

Archiver|新帖|标签|软件|Sitemap|ZNDS智能电视网 ( 苏ICP备2023012627号 )

网络信息服务信用承诺书 | 增值电信业务经营许可证:苏B2-20221768 丨 苏公网安备 32011402011373号

GMT+8, 2025-7-29 21:26 , Processed in 0.066243 second(s), 15 queries , Redis On.

Powered by Discuz!

监督举报:report#znds.com (请将#替换为@)

© 2007-2025 ZNDS.Com

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