没有合适的资源?快使用搜索试试~ 我知道了~
Android四大组件快速入门
3星 · 超过75%的资源 需积分: 9 13 下载量 76 浏览量
2012-04-27
10:01:30
上传
评论 1
收藏 156KB DOC 举报
温馨提示
试读
24页
帮助您实现Android快速入门,迅速理解android四大组件,新人上手必备文档,后续更新,敬请关注。
资源推荐
资源详情
资源评论
Android 应用程序由一些零散的有联系的组件组成,通过一个工程 manifest 绑定在一起。
在 manifest 中,描述了每一个组件以及组件的作用,其中有 6 个组件,它们是 Android 应用
程序的基石:
Activities(活动) 应用程序的显示层。每一个画面对应于你的应用程序,将会是
Activity 类的扩展。Activity 使用 Views 去构建 UI 来显示信息和响应用户的行为。就桌面开
发而言,一个 Activity 相当于一张 Form。你在这章中将会学习到更多关于 Activities。
Services(服务) Android 应用程序中不可见的“工人”。 Service 组件运行时不可见,
但它负责更新的数据源和可见的 Activity,以及触发通知。它们常用来执行一些需要持续运
行的处理,当你的 Activity 已经不处于激活状态或不可见。你将在第 8 章学习怎样创建
Service。
Content(内容) 提供共享的数据存储。Content Provider(内容提供器)用来管理和
共享应用程序的数据库。在应用程序间,Content Provider 是共享数据的首选方式。这意味
着,你可以配置自己的 Content Provider 去存取其他的应用程序或者通过其他应用程序暴露
的 Content Provider 去存取它们的数据。Android 设备本身包含了几个 Content Provider 来访
问像联系人信息等有用的数据库。你将在第 6 章学习怎样创建和使用 Content Provider。
Intents(意图) 简单的消息传递框架。使用 Intent,你可以在整个系统内广
播消息或者给特定的 Activity 或者服务来执行你的行为意图。系统会决定那个(些)目标来执
行适当的行为。
Broadcast Receivers(广播接收器) Intent 广播的“消费者”。通过创建和注册
一个 Broadcast Receiver , 应用程序可以监听 符 合 特定条件的广播的 Intent 。Broadcast
Receiver 会自动的启动你的 Android 应用程序去响应新来的 Intent。Broadcast Receiver 是事
件驱动程序的理想手段。
Notifications(通知) 用户通知的框架。Notification 用来在不需要焦点或不中
断它们当前 Activity 的情况下提示用户。它们是 Service 或 Broadcast Receiver 获得用户注意
的首选方式。例如,当设备收到文本信息或外部来电时,它通过闪光,发声,显示图标或
显示对话框信息来提醒你。在第 8 章里,你可以使用 Notification 来触发这些事件。
一、Activity 详解
Activty 的生命周期的也就是它所在进程的生命周期。
一个 Activity 的启动顺序:
onCreate()——>onStart()——>onResume()
当另一个 Activity 启动时:
第 一 个 Activity onPause()——> 第 二 个 ActivityonCreate()——>onStart()——
>onResume()
——>第一个 ActivityonStop()
当返回到第一个 Activity 时:
第二个 Activity onPause()——>第一个 Activity onRestart()——>onStart()——
>onResume()
——>第二个 Activity onStop()——>onDestroy()
一个 Activity 的销毁顺序:
(情况一)onPause()——><Process Killed>
(情况二)onPause()——>onStop()——><Process Killed>
(情况三)onPause()——>onStop()——>onDestroy()
每一个活动( Activity )都处于某一个状态,对于开发者来说,是无法控制其应用程
序处于某一个状态的,这些均由系统来完成。
但是当一个活动的状态发生改变的时候,开发者可以通过调用 onXX() 的方法获取到
相关的通知信息。
在实现 Activity 类的时候,通过覆盖( override )这些方法即可在你需要处理的时候
来调用。
一、 onCreate :当活动第一次启动的时候,触发该方法,可以在此时完成活动的初始
化工作。
onCreate 方法有一个参数,该参数可以为空( null ),也可以是之前调用
onSaveInstanceState ()方法保存的状态信息。
二、 onStart :该方法的触发表示所属活动将被展现给用户。
三、 onResume :当一个活动和用户发生交互的时候,触发该方法。
四、 onPause:当一个正在前台运行的活动因为其他的活动需要前台运行而转入后台运
行的时候,触发该方法。这时候需要将活动的状态持久化,比如正在编辑的数据库记录等。
五、 onStop :当一个活动不再需要展示给用户的时候,触发该方法。如果内存紧张,
系统会直接结束这个活动,而不会触发 onStop 方法。 所以保存状态信息是应该在
onPause 时做,而不是 onStop 时做。活动如果没有在前台运行,都将被停止或者 Linux
管理进程为了给新的活动预留足够的存储空间而随时结束这些活动。因此对于开发者来说,
在设计应用程序的时候,必须时刻牢记这一原则。在一些情况下,onPause 方法或许是活
动触发的最后的方法,因此开发者需要在这个时候保存需要保存的信息。
六、onRestart :当处于停止状态的活动需要再次展现给用户的时候,触发该方法。
七、 onDestroy:当活动销毁的时候,触发该方法。和 onStop 方法一样,如果内存紧
张,系统会直接结束这个活动而不会触发该方法。
· onSaveInstanceState :系统调用该方法,允许活动保存之前的状态,比如说在一串
字符串中的光标所处的位置等。
通常情况下,开发者不需要重写覆盖该方法,在默认的实现中,已经提供了自动保存活动
所涉及到的用户界面组件的所有状态信息。
Activity 栈
上面提到开发者是无法控制 Activity 的状态的,那 Activity 的状态又是按照何种逻辑
来运作的呢?这就要知道 Activity 栈。
每个 Activity 的状态是由它在 Activity 栈(是一个后进先出 LIFO,包含所有正在运
行 Activity 的队列)中的位置决定的。
当一个新的 Activity 启动时,当前的活动的 Activity 将会移到 Activity 栈的顶部。
如果用户使用后退按钮返回的话,或者前台的 Activity 结束,活动的 Activity 就会被
移出栈消亡,而在栈上的上一个活动的 Activity 将会移上来并变为活动状态。如下图所示:
一个应用程序的优先级是受最高优先级的 Activity 影响的。当决定某个应用程序是否
要终结去释放资源,Android 内存管理使用栈来决定基于 Activity 的应用程序的优先级。
Activity 状态
一般认为 Activity 有以下四种状态:
活动的:当一个 Activity 在栈顶,它是可视的、有焦点、可接受用户输入的。Android
试图尽最大可能保持它活动状态,杀死其它 Activity 来确保当前活动 Activity 有足够的资源
可使用。当另外一个 Activity 被激活,这个将会被暂停。
暂停:在很多情况下,你的 Activity 可视但是它没有焦点,换句话说它被暂停了。有
可能原因是一个透明或者非全屏的 Activity 被激活。
当被暂停,一个 Activity 仍会当成活动状态,只不过是不可以接受用户输入。在极特
殊的情况下,Android 将会杀死一个暂停的 Activity 来为活动的 Activity 提供充足的资源。
当一个 Activity 变为完全隐藏,它将会变成停止。
停止:当一个 Activity 不是可视的,它“停止”了。这个 Activity 将仍然在内存中保存它
所有的状态和会员信息。尽管如此,当其它地方需要内存时,它将是最有可能被释放资源
的。当一个 Activity 停止后,一个很重要的步骤是要保存数据和当前 UI 状态。一旦一个
Activity 退出或关闭了,它将变为待用状态。
待用: 在一个 Activity 被杀死后和被装在前,它是待用状态的。待用 Acitivity 被移除
Activity 栈,并且需要在显示和可用之前重新启动它。
activity 的四种加载模式
在 android
的多 activity 开发中,activity 之间的跳转可能需要有多种方式,有时是普
通的生成一个新实例,有时希望跳转到原来某个 activity 实例,而不是生成大量的重复的
activity。加载模式便是决定以哪种方式启动一个跳转到原来某个 Activity 实例。
在 android 里,有 4 种 activity 的启动模式,分别为:
·standard: 标准模式,一调用 startActivity()方法就会产生一个新的实例。
·singleTop: 如果已经有一个实例位于 Activity 栈的顶部时,就不产生新的实例,而只是
调用 Activity 中的 newInstance()方法。如果不位于栈顶,会产生一个新的实例。
·singleTask: 会在一个新的 task 中产生这个实例,以后每次调用都会使用这个,不会去
产生新的实例了。
·singleInstance: 这个跟 singleTask 基本上是一样,只有一个区别:在这个模式下的
Activity 实例所处的 task 中,只能有这个 activity 实例,不能有其他的实例。
这些启动模式可以在功能清单文件 AndroidManifest.xml 中进行设置,中的 launchMode
属性。
相 关的代码 中也有一些标志可以使用 ,比如 我们想只 启用一个实例, 则可以使用
Intent.FLAG_ACTIVITY_REORDER_TO_FRONT 标志,这个标志表示:如果这个 activity
已经启动了,就不产生新的 activity,而只是把这个 activity 实例加到栈顶来就可以了。
1 Intent intent = new Intent(ReorderFour.this, ReorderTwo.class);
2 intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
3 startActivity(intent);
复制代码
Activity 的加载模式受启动 Activity 的 Intent 对象中设置的 Flag 和 manifest 文件中
Activity 的元素的特性值交互控制。
下面是影响加载模式的一些特性
核心的 Intent Flag 有:
FLAG_ACTIVITY_NEW_TASK
FLAG_ACTIVITY_CLEAR_TOP
FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
FLAG_ACTIVITY_SINGLE_TOP
核心的特性有:
taskA0nity
launchMode
allowTaskReparenting
clearTaskOnLaunch
alwaysRetainTaskState
2nishOnTaskLaunch
四种加载模式的区别
所属 task 的区别
一般情况下,“standard”和”singleTop”的 activity 的目标 task,和收到的 Intent 的发送者
在同一个 task 内,就相当于谁调用它,它就跟谁在同一个 Task 中。
剩余23页未读,继续阅读
资源评论
- H-lecter2014-05-04一般般,排版太乱
- 莫欺少年穷2012-09-10基础文档,新手使用
ayiso
- 粉丝: 0
- 资源: 15
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功