博客园
闪存
首页
新随笔
联系
管理
订阅
随笔- 62 文章- 0 评论- 250
Android 实现程序前后台切换效果
本文演示如何在 Android 中实现程序前后台切换效果。
在介绍程序实现之前,我们先看下 Android 中 Activities 和 Task 的基础知识。
我们都知道,一个 Activity 可以启动另一个 Activity,即使这个 Activity 是定义在别一个应用程序里
的,比如说,想要给用户展示一个地图的信息,现在已经有一个 Activity 可以做这件事情,那么现
在你的 Activity 需要做的就是将请求信息放进一个 Intent 对象里,并且将这个 Intent 对象传递给
startActivity(),那么地图就可显示出来了,但用户按下 Back 键之后,你的 Activity 又重新出现在
屏幕上。
对用户来讲,显示地图的 Activity 和你的 Activity 好像在一个应用程序中的,虽然是他们是定义在
其他的应用程序中并且运行在那个应有进程中。Android 将你的 Activity 和借用的那个 Activity 被
放进一个 Task 中以维持用户的体验。那么 Task 是以栈的形式组织起来一组相互关联的 Activity,栈
中底部的 Activity 就是开辟这个 Task 的,通常是用户在应用程序启动器中选择的 Activity。栈的顶
部的 Activity 是当前正在运行的 Activity--用户正在交互操作的 Activity。
当一个 Activity 启动另一个 Activity 时,新启动的 Activity 被压进栈中,成为正在运行的
Activity。旧的 Activity 仍然在栈中。当用户按下 BACK 键之后,正在运行的 Activity 弹出栈,旧
的 Activity 恢复成为运行的 Activity。栈中包含对象,因此如果一个任务中开启了同一个 Activity
子类的的多个对象——例如,多个地图浏览器——则栈对每一个实例都有一个单独的入口。栈中的
Activity 不会被重新排序,只会被、弹出。Task 是一组 Activity 实例组成的栈,不是在 manifest
文件里的某个类或是元素,所以无法设定一个 Task 的属性而不管它的 Activity,一个 Task 的所有
属性值是在底部的 Activity 里设置的,这就需要用于 Anity。关于 Anity 这里不再详述,大家
可以查询文档。
一个 Task 里的所有 Activity 作为一个整体运转。整个 Task(整个 Activity 堆栈)可以被推到前台
或被推到后台。假设一个正在运行的 Task 中有四个 Activity——正在运行的 Activity 下面有三个
Activity,这时用户按下 HOME 键,回到应有程序启动器然后运行新的应用程序(实际上是运行了
一个新的 Task),那么当前的 Task 就退到了后台,新开启的应用程序的 root Activity 此时就显
示出来了,一段时间后,用户又回到应用程序器,又重新选择了之前的那个应用程序(先前的那个
Task),那么先前的那个 Task 此时又回到了前台了,当用户按下 BACK 键时,屏幕不是显示刚刚