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

TV应用下载 / 资源分享区

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

综合交流 / 评测 / 活动区

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

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

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

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

Android开发笔记第四篇(应用解析)

[复制链接]
跳转到指定楼层
楼主
发表于 2013-8-28 16:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
活动是最基本的 Android 应用程序组件,应用程序中,一个活动通常就是一个单独的屏幕。每一个活动
都被实现为一个独立的类,并且从活动基类中继承而来,活动类将会显示由视图控件组成的用户接口,并对
事件做出响应。大多数的应用是由多个屏幕显示组成。例如:一个文本信息的应用也许有一个显示发送消息的
联系人列表屏幕,第二个屏幕用来写文本消息和选择收件人,再来一个屏幕查看消息历史或者消息设置操作
等。这里每一个这样的屏幕就是一个活动,很容易实现从一个屏幕到一个新的屏幕并且完成新的活动。在某
些情况下当前的屏幕也许需要向上一个屏幕活动提供返回值--比如让用户从手机中挑选一张照片返回通讯录
做为电话拨入者的头像。
当一个新的屏幕打开后,前一个屏幕将会暂停,并保存在历史堆栈中。用户可以返回到历史堆栈中的前
一个屏幕。当屏幕不再使用时,还可以从历史堆栈中删除。默认情况下,Android 将会保留从主屏幕到每一
个应用的运行屏幕。
简单理解 Activity 代表一个用户所能看到的屏幕,Activity 主要是处理一个应用的整体性工作,例如,监
听系统事件(按键事件、触摸屏事件等)、为用户显示指定的 View,启动其他 Activity 等。所有应用的 Activity
都继承于android.app.Activity 类,该类是 Android 提供的基层类,其他的 Activity 继承该父类后,通过 Override
父类的方法来实现各种功能,这种设计在其他领域也较为常见。
调用 Android 专有类 Intent 进行架构屏幕之间的切换。Intent 是描述应用想要做什么。Intent 数据结构两
个最重要的部分是动作和动作对应的数据。典型的动作类型有:MAIN(活动的门户)、 VIEWPICKEDIT
等。而动作对应的数据则以 URI 的形式进行表示。例如:要查看某个人的联系方式,你需要创建一个动作类
型为 VIEW Intent,以及一个表示这个人的 URI
Android 使用了 Intent 这个特殊类,实现在屏幕与屏幕之间移动。Intent 类用于描述一个应用将会做什么
事。在 Intent 的描述结构中,有两个最重要的部分:动作和动作对应的数据。典型的动作类型有: AINactivity
的门户)、 VIEWPICKEDIT 等。而动作对应的数据则以 URI 的形式进行表示。例如:要查看一个人的联
系方式,你需要创建一个动作类型为 VIEW intent,以及一个表示这个人的 URI
与之有关系的一个类叫 IntentFilter。相对于 intent 是一个有效的做某事的请求,一个 intentfilter 则用于描
述一个 activity(或者 IntentReceiver)能够操作哪些 intent。一个 activity 如果要显示一个人的联系方式时,需
要声明一个 IntentFilter,这个 IntentFilter 要知道怎么去处理 VIEW 动作和表示一个人的 URIIntentFilter
要在AndroidManifest.xml 中定义。
通过解析各种 intent,从一个屏幕导航到另一个屏幕是很简单的。当向前导航时, activity 将会调用
startActivity(IntentmyIntent)方法。然后,系统会在所有安装的应用程序中定义的 IntentFilter 中查找,找到最
匹配 myIntent Intent 对应的 activity。新的 activity 接收到 myIntent 的通知后,开始运行。当 startActivity
法被调用将触发解析 myIntent 的动作,这个机制提供了两个关键好处:
A、Activities 能够重复利用从其它组件中以 Intent 的形式产生的一个请求;
B、Activities 可以在任何时候被一个具有相同 IntentFilter 的新的 Activity 取代。
当你希望你的应用能够对一个外部的事件(如当电话呼入时,或者数据网络可用时,或者到了晚上时)做出响
应,你可以使用一个 IntentReceiver。虽然 IntentReceiver 在感兴趣的事件发生时,会使用NotificationManager通知用户,但它并不能生成一个 UI。IntentReceiver 在AndroidManifest.xml 中注册,但也可以在代码中使用
Context.registerReceiver()进行注册。当一个 intentreceiver 被触发时,你的应用不必对请求调用 intentreceiver,
系统会在需要的时候启动你的应用。各种应用还可以通过使用Context.broadcastIntent() 将它们自己的
intentreceiver 广播给其它应用程序。
一个 Service 是一段长生命周期的,没有用户界面的程序。比较好的一个例子就是一个正在从播放列表中
播放歌曲的媒体播放器。在一个媒体播放器的应用中,应该会有多个 activity,让使用者可以选择歌曲并播放
歌曲。然而,音乐重放这个功能并没有对应的 activity,因为使用者当然会认为在导航到其它屏幕时音乐应该
还在播放的。在这个例子中,媒体播放器这个 activity 会使用Context.startService()来启动一个 service,从而
可以在后台保持音乐的播放。同时,系统也将保持这个 service 一直执行,直到这个 service 运行结束。另外,
我们还可以通过使用Context.bindService()方法,连接到一个 service 上(如果这个 service 还没有运行将启动它)。当连接到一个 service 之后,我们还可以 service 提供的接口与它进行通讯。拿媒体播放器这个例子来说,
我们还可以进行暂停、重播等操作。
Android 应用程序能够将它们的数据保存到文件、SQLite 数据库中,甚至是任何有效的设备中。当你想
将你的应用数据与其它的应用共享时,内容提供器就可以发挥作用了。因为内容提供器类实现了一组标准的
方法,从而能够让其它的应用保存或读取此内容提供器处理的各种数据类型。
数据是应用的核心。在 Android 中,默认使用鼎鼎大名的 SQLite 作为系统 DB。但是在 Android 中,使用方
法有点小小的不一样。在 Android 中每一个应用都运行在各自的进程中,当你的应用需要访问其他应用的数
据时,也就需要数据在不同的虚拟机之间传递,这样的情况操作起来可能有些困难(正常情况下,你不能读取
其他的应用的 db 文件),ContentProvider 正是用来解决在不同的应用包之间共享数据的工具。
   
   
所有被一个 Android 应用程序创建的偏好设置,文件和数据库都是私有的。
为了和其他应用程序共享数据,应用程序不得不创建一个 ContentProvider要回索其他应用程序的数据,它自己的 ContentProvider 必须被调用Android 本地 ContentProvider 包括:   
CallLog:地址和接收到的电话信息
Contact.People.Phones:存储电话号码
Setting.System:系统设置和偏好设置
等等
</div

上一篇:如何单独编译Android源代码中的模块
下一篇:二维码简化
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

GMT+8, 2024-5-6 05:06 , Processed in 0.065634 second(s), 13 queries , Redis On.

Powered by Discuz!

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

© 2007-2024 ZNDS.Com

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