第四章 Android开发三大基石—Activity、Service和Handler
学习Android开发,首先就不得不学习Activity和Service这两个组件。Activity是有界面的程序,几乎承载着用户对应用程序的所有操作。而Service是没有界面的程序,它是所谓的服务,也叫后台程序。掌握好它们,是我们学习Android开发必不可少的环节。Handler是Android开发中最常用的消息机制,几乎所有应用程序都会使用Handler传递消息。可以说,想要学习Android应用开发,就不得不学习Activity、Service的开发,学习如何使用Handler机制。本章就来详细介绍如何利用它们进行Android开发。
4.1 应用程序的接口—Activity窗口
Activity是Android中最基本也是最为常见的组件。它是Android的核心,是被用来与用户及Android内部特性交互的组件,在应用程序中用到的所有Activity都需要在AndroidManifest.xml文件中进行注册。那么Activity是怎样一种组件,它是怎么样进行显示交互的,一个Activity实例是如何被管理和运行起来的,Activity生命周期又是怎么样的?这些都是我们需要掌握的内容。
4.1.1Activity生命周期
在一个Android应用中,一个Activity通常就是一个单独的屏幕,一个Activity的生命周期也就是它所在进程的生命周期。在 Android中,Activity 拥有四种基本状态:
1)活动的(Active/Running) 一个新 Activity 启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态;
2)暂停(Paused) 当 Activity 被另一个透明或者 Dialog 样式的 Activity 覆盖时的状态。此时它依然与窗口管理器保持连接,系统继续维护其内部状态,所以它仍然可见,但它已经失去了焦点故不可与用户交互;
3)停止(Stopped) 当Activity 被另外一个 Activity 覆盖、失去焦点并不可见时处于 Stopped 状态;
4)待用(Destroyed) 被系统杀死回收或者没有被启动时处于 Destroyed状态。
Activity处于某一状态是由系统来完成的,我们无法控制。但是,当一个Activity的状态改变的时候,我们可以通过onXX()方法来获取到相关的通知信息。这样,我们在实现Activity的时候,就可以通过覆盖onXX()方法在需要的时候来调用它们,如图4-1所示:
图4-1 Activity生命周期
Activity的完整生命周期自第一次调用onCreate()方法开始,直至调用onDestroy()方法为止。Activity的可视生命周期自onStart()方法调用开始,直到应用的onStop()方法调用结束。在此期间,用户可以在屏幕看见Activity,尽管它也许并不位于前台或者也不与用户进行交互。Activity的前台生命周期自onResume()方法调用起,至相应的onPause()结束。在此期间,Activity位于前台的最上面并与用户进行交互。
经验分享: 以上所说的都是正常情况下的Activity的生命周期。需要注意的是,系统可能因为内存不足等原因杀死某进程,当进程被杀死以后,所有的Activity都会被杀死。此时,onPause()是唯一一个在进程被杀死之前必然会调用的方法,onStop() 和 onDestroy() 都有可能不被执行。 |
4.1.2 Activity栈
我们知道,我们是无法控制Activity状态的,那么Activity的状态又是按照何种逻辑来运作的呢?其实,Android 是通过一种 Activity 栈的方式来管理 Activity 的,一个 Activity 的实例的状态决定它在栈中的位置。处于前台的 Activity 总是在栈的顶端,当前台的 Activity 因为异常或其它原因被销毁时,处于栈第二层的 Activity 将被激活,上浮到栈顶。当新的 Activity 启动入栈时,原 Activity 会被压入到栈的第二层。一个 Activity 在栈中的位置变化反映了它在不同状态间的转换。Activity 的状态与它在栈中的位置关系如图4-2所示:
图4-2 Activity栈
一个应用程序的优先级是受最高优先级的Activity影响的。当决定某个应用程序是否要终结去释放资源,Android内存管理使用栈来决定基于Activity的应用程序的优先级。