coursera上Programming Mobile Applications for Android Handheld Systems: Part 1的课程笔记。
本讲的内容为Activity类介绍。
*概述
Activity类是与用户交互的基础类,Activity提供可视化的接口,这样用户能够和应用交互。Activity需要模块化,每一个Activity能够支持单一的焦点事件,比如浏览邮件信息或者在屏幕中显示日志。
通过支持任务回溯概念来管理用户交互的特定Activity,并保证Activity在任务回溯栈中出入栈时被挂起和重启。在Android中,Task是一系列相关Activity的组合,通常当用户在home界面启动一个新应用时,一个Task被创建。任务回溯栈则类似调用栈的概念。
Activity生命周期:
当Activity处于Resumed或Running状态时,它相对用户可见,用户可以与之交互。
当Activity处于Paused状态时,它可以相对用户可见,但用户不能与之交互。在此状态下Activity可能被Android终止。
当处于Stopped状态时Activity变为不可见状态,Android终止Activity直到用户重新回到这个Activity。
Android提供了一系列方法供调用,为onCreate,onStart,onResume,onPause,onStop,onDestroy,onRestart。
Android不一定总执行onStop方法,因为应用进程可能被直接终止。
应用在onStart到onStop之间的周期范围内可见。
下图为常见的Activity生命周期图。
onCreate()
onCreate方法在Activity被首次被创建时调用,主要作用是初始化Activity。
1、调用super.onCreate()
2、设置Activity的内容视图
3、保持和配置UI视图
onRestart()
onRestart方法在Activity被停止后又重新启动时调用。
onStart()方法完成在用户可见的形式下的行为。比如在阅读邮件应用里的更新未读信息队列操作。
onResume()方法,当Activity可见并将开始与用户交互时调用。如开始动画或播放背景音乐。
onPause()方法,当Activity即将失去焦点时被调用。在这个方法中可以结束一些前台行为如结束动画。此外用户编辑的保留状态信息也在这个方法中保存。
onStop()方法当Activity对用户不可见时调用。因为Activity可能重新启动,这里可以缓存状态信息。onStop方法可能不会被调用到,比如当内存不够时Android直接终止应用进程,所以应将存储数据的操作放在onPause方法中。
onDestroy()方法调用时间是Activity即将被销毁时。内容是释放Activity的资源,如私有线程。
创建一个intent对象来指定要启动的Activity,然后将其传递给startActivity()或startActivityForResult()方法。其中startActivityForResult()方法会得到在被调用Activity中onActivityResult()方法中的值。
Activity.setResult()方法用于设置被调用Activity的返回值。
*更改配置
当设备的配置在运行时改变,Android会终止当前进程,并使用合适的资源重启它,因此要保证生命周期方法中的代码高效。
对此,当发生这种改变时,你可以用一个Java对象来保存状态信息,方法是重写onRetainNonConfigurationInstance(),这个方法在onStop和onDestroy间被调用,而它返回的对象将在Activity被重建时通过getLastNonConfigurationInstance获得,但现在这种方法不被提倡;或者,你可以手动处理配置改变,在AndroidManifest.xml文件中声明常被改变的配置,这样当配置在运行时改变,Activity会受到对onConfigurationChanged()方法的调用,带有新配置的Configuration对象会作为参数传入。