Android Intent和Bundle机制实例详解
Android中提供了Intent机制来协助应用间的交互与通讯,或者采用更准确的说法是,Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的交互。Intent这个英语单词的本意是“目的、意向”等,对于较少从事于大型平台开发工作的程序员来说,这可能Intent的使用中你看不到直接的函数调用,相对函数调用来说,Intent是更为抽象的概念,利用Intent所实现的软件复用的粒度是Activity/Service,比函数复用更高一些,另外耦合也更为松散。
?
Android中与Intent相关的还有Action/Category及Intent Filter等,另外还有用于广播的Intent,这些元素掺杂在一起,导致初学者不太容易迅速掌握Intent的用法。在讲解这些名词之前,我们先来从下面的例子中感受一下Intent的一些基本用法,看看它能做些什么,之后再来思考这种机制背后的意义。
?
理解Intent的关键之一是理解清楚Intent的两种基本用法:一种是显式的Intent,即在构造Intent对象时就指定接收者,这种方式与普通的函数调用类似,只是复用的粒度有所差别;另一种是隐式的Intent,即Intent的发送者在构造Intent对象时,并不知道也不关心接收者是谁,这种方式与函数调用差别比较大,有利于降低发送者和接收者之间的耦合。另外Intent除了发送外,还可用于广播,这些都将在后文进行详细讲述。
应用生命周期
Android引入了一个全新的机制-应用程序生命周期(Life Cycle)。
多数情况下,一个Android应用运行在一个独立的Linux进程中
应用进程的的生命周期(存活时间)不是由进程自己控制,而是由Android系统决定
影响应用生命周期的主要因素包括:该进程对于用户的重要性,以及当前系统中还剩多少可用内存。
Activity生命周期
使用Bundle在Activity间传递数据
Log与DDMS
Activity生命周期
Activity
何谓Activity:最简单的就是你可以把Activity看成一个User Interface Program,原则上它会提供使用者一个交互式的接口功能,那一个activity只有一个UI吗?非也,举例来说:一个email程序,就可能 包含三个activity
邮件列表的activity
显示邮件内容的activity
写新邮件或回复邮件的activity
所有的Activity在系统里由Activity堆栈所管理,当一个新的Activity被执行后,它将会被放置到堆栈的最顶端,并且变 成"running activity", 而先前的Activity原则上还是会存在于堆栈中,但它此时不会是在前景的情况,除非刚刚那个新的Activity离开。
Activity状态
当一个Activity在屏幕的最上层时(堆栈的最顶端),它就是属于active或running的状态
如果一个Activity失去焦点(focus)但还看得到它的画面(比如:一个新的Activity画面并不是全屏幕或者它是一个半透明的情况),那失去焦点的这个Activity则处在paused的状态。像这个失去焦点的Activity它还是完全活着的,并没有消失。(活着的意思是指,Activity自已本身所有的状态及数据都还是存在的,也跟窗口管理程序window manager保持连系着),像这种paused的activity,会在一种情况下消失,那就是当系统的内存不够用之时,系统会自动判断,把不重要的 activity移除。
Activity状态-cont
如果一个Activity被其它的Activity完全的遮住时,这个被遮的Activity处于stop的状态,它仍然保有全部的状态及数据,但因为它已不再被使用者看见,所以它的画面是被隐藏起来的(画面不需要更新),当系统内存不足时,这种stop状态的activity是最先被系统考虑拿来释放内存的。
当一个Activity处于pause或stop的状态时,系统可以要求Activity结束(finish)或直接移除(kill)它。当它需要再度呈现在使用者面前时,它必需要能完整的重新启动及回复先前的状态
Intent与Activity
Intent 与 Intent filters
Broadcast Intent Receiver
添加新的Activity
何谓Activity:最简单的就是你可以把Activity看成一个User Interface Program,原则上它会提供使用者一个交互式的接口功能,那一个activity只有一个UI吗?非也,举例来说:一个