您的位置:首页 > 移动开发 > Android开发

Android学习小结(一)——由Activity说开去

2011-03-18 08:55 351 查看
虽然是学习小结第一篇,但是配环境啥的我就不说了,这个Google一大把,也没什么纪念意义。本文主要介绍Activity相关的东西。

首先说Activity是什么?

Activity是个挺重要的一个组件,也是最基本的组件。


An Activity is an application component that provides a screen with which users can interact in order to do something, such as dial the phone, take a photo, send an email, or view a map.


大意是,Activity是人机交互的主要组件。其实这个很好理解,不严谨的说就是一个手机应用的一个操作界面。

个人感觉Android的架构设计,很像一个MVC模式的网站的架构。一个Activity可以看成一个Web页面,这样消除了Activity间的耦合。状态传递主要通过共享存储或者intent的extraData传递(以后会说到)。

刚开始的时候,对于只有一个Activity的应用来说,主要会涉及到Activity的生命周期和UI布局(这个以后说)。

生命周期是个很重要的概念,Android的开发者中心的Dev Guide有个非常经典的图和一个表格,我在这里给出链接,就不贴图了。(对于无法访问该站点的同学,推荐下载文档到本地,这样速度还快些。以下相关链接同。)

这里,我先介绍一个无关、却对理解生命周期十分有帮助的东西。就是Android提供的一个重要的类Log。详细介绍地址这里。我简单说下,这个就是输出日志。我觉得日志是理解程序执行流程的利器。查看可以通过Eclipse的DDMS的图形化LogCat,或者adb logcat查看(后者对于复杂日志的分析更为好用)。对于生命周期的理解,我就采取了观察Log的方法。我在每一个生命周期的活动的回调函数中,也就是onXXX()这类函数中,添加Log.i()方法,查看程序流程。其实细心看文档的话,关于声明周期,文档说的是很明确的。但是可能不太好理解,我也是后来在有一定理解的基础上,再看文档,才有种豁然开朗的感觉。

这里摘录一段《Android基础教程》的话:


Android程序中的每个活动在其存在期间都会处于以下多种状态之一。开发人员不能控制程序处于哪个窗台,这是由系统管理的。但是通过onXX()方法调用改变状态时,系统会通知开发人员。
在Android中,即使所在进程被“杀死”,相应的应用程序仍然还是“活着的”,换句话说,活动的生命周期与进程的生命周期没有关系。进程只是各种活动可随意使用的一个容器。


(这里我说一个细节,对于Android屏幕旋转,当前的Activity会完成整个一轮生命周期。然后重新创建,回调onCreate()方法。)

一个Activity肯定是不能满足大部分需求的,于是就涉及到了多个Activity的切换。这里涉及到另一个很重要的概念intent和intent-filter

intent可以翻译成意图,就是“要做什么”。比如你有两个Activity,分别是ActivityA和ActivityB,当年显示为ActivityA,这个时候你想调用ActivityB。你就需要通过intent进行调用。很多地方说intent有两种方式,一种显式,一种隐式。确实是两种。

先说显式,这个比较容易理解,这个就像固定的链接,你写好跳转的位置,然后就跳过去了。

代码类似这样:

Intent i = new Intent(this, ActivityB.class);
startActivity(i);

这样就跳转到ActivityB了。

而隐式呢,就像正则匹配一样,通过intent-filter规定的规则,进行匹配。对于Intent还有非常大量的细节,我会在稍候的总结中写出。

再说下AndroidManifest.xml文件,你的每一个Activity需要在这个文件中声明,并填写intent-filter(非必须)。具体细节我一并在后文中写出。

伴随随着Activity,还涉及到Task这个概念,这个也是一个比较重要的东西。具体参考这里


A task is a collection of activities that users interact with when performing a certain job. The activities are arranged in a stack (the "back stack"), in the order in which each activity is opened.


我说一下大意:

Task是一系列Activity的集合,而这些Acitivity被放置到一个叫做“后退栈”(back stack)中。系统中可以存在多个Task,每个Task有多个Activity。存在前台(Foreground)Task和后台(Background)Task。前台Task是正在前台和用户进行交互的任务,其它则为后台Task。每一个Task维护一套Activity的Back Stack(后退栈)。比如说你现在你点击了一个icon开启了一个应用的ActivityA,然后跳转到ActivityB,然后ActivityC。这样的话ActivityA和ActivityB,ActivityC就会相应入栈,当按了Back键之后,ActivityC就会出栈,并且销毁,此时会回调onDestroy()方法。此时,切换到另一个应用,那么当前的应用就会成为后台Task,而切换过来的应用会成为前台Task,这个应用有它自己独自Activity栈,也会进行后进先出的栈操作。

注:本人初学,可能一些细节上会有纰漏,如果你有什么迷惑可以留言或者可以Google,谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: