Android四大组件之活动--Acitivity

1.什么是活动Activity

  活动Activity是可以包含用户界面的组件,主要用于和用户进行交互。一个应用程序通常包含零个或多个活动Activity,应用程序包含的Activity都必须在AndroidManifest文件中注册,如果不注册则会引起报错。对于每个应用程序,都有一个主Activity,在AndroidManifest文件中注册为<actionandroid:name="android.intent.action.MAIN" />。

  程序第一次运行,用户首先看到的是主Activity。Android程序主张逻辑与视图分离,最好是一个Activity对应一个布局文件,布局文件是用来显示界面内容的。Andorid是通过任务来管理Activity的,一个任务就是一组存放在栈里的活动的集合,这个栈称为返回栈。启动一个新的Activity,则新的Activity压入栈中,同时获取焦点,新的活动覆盖在原活动之上。当销毁一个Activity时,此Activity出栈,前一个Activity恢复,重新显示。系统总是会显示栈顶的活动给用户。

 

2.活动Activity的四种状态

  2.1 运行状态

  Activity位于返回栈的栈顶。在此状态下,系统最不愿意回收此Activity。

  2.2 暂停状态

  Activity不再处于栈顶,但仍然可见,活动就进入了暂停状态。由于可见,系统也不愿意回收这种Activity,只有在内存极低的情况下,系统才会考虑回收这种活动。

  2.3 停止状态

  Activity不再处于栈顶,而且完全不可见。活动进入了停止状态。系统仍然会保存此活动的状态和成员变量,但当其他地方需要内存时,处于停止状态的活动有可能会被系统回 收。

  2.4 销毁状态

  Activity从返回栈移除后就变成了销毁状态。系统最倾向于回收处于这种状态的活动,保证设备内存充足。

 

3.活动Activity的生命周期

  Activity类中定义了七个回调方法,覆盖生命周期的每一个环节。

  3.1 onCreate()

  活动第一次创建是调用。此方法中进行初始化操作,比如加载布局,绑定事件等。

  3.2 onStart()

  活动由不可见变为可见时调用。

  3.3 onResume()

  活动准备好和用户进行交互的时候调用。此时的活动一定位于返回栈的栈顶,并且处于运行状态。

  3.4 onPause()

  系统准备去启动或者恢复另一个活动的时候调用。通常在这个方法中将一些消耗CPU的资源释放掉,以及保存一些关键数据,但这个方法的执行速度一定要快,不然会影响到新的栈顶活动的使用。

  3.5 onStop()

  活动完全不可见的时候调用。与onPause()方法的区别在于,如果启动的新活动是一个对话框式的活动,那么onPause()方法会得到执行,而onStop()方法并不会执行。

  3.6 onDestroy()

  活动被销毁之前调用,之后活动的状态将变为销毁状态。

  3.7 onRestart()

  活动由停止状态变为运行状态之前调用,也就是活动被重新启动了。

 

4.活动Activity的生存期

  4.1完整生存期

  活动在onCreate()方法和onDestroy()方法之间所经历的,就是完整的生存期。一般情况下,一个活动会在onCreate()方法中完成各种初始化操作,而在onDestroy()中完成释放内存的操作。

  4.2可见生存期

  活动在onStart()方法和onStop()方法之间所经历的,就是可见生存期。在可见生存期内,活动对于用户总是可见的,即便有可能无法和用户进行交互。我们可以通过这两个方法,合理的管理那些对用户可见的资源。比如在onStart()方法中对资源进行加载,而在onStop()方法中对资源进行释放,从而保证停止状态的活动不会占用过多内存。

  4.3前台生存期

  活动在onResume()方法和onPause()方法之间所经历的,就是前台生存期。在前台生存期内,活动总是处于运行状态的,此时的活动是可以和用户进行交互的,我们平时看到和接触最多的也是这个状态下的活动。

 

技术分享

 

5.活动Activity的四种启动模式

  在实际项目中,我们可以在AndroidManifest.xml中通过<activity>标签指定android:launchMode属性来选择启动模式。

  5.1 standard

  standart是活动默认的启动模式。Android是使用返回栈来管理活动的,在standard模式下,每启动一个新的活动,它就会在返回栈中入栈,并处于栈顶位置。对于使用standard模式的活动,系统不会在乎这个活动是否已经在返回栈中存在,每次启动都会创建该活动的一个新的实例。有几个实例在栈顶,则需要按几次Back键才能退出。

  5.2 singleTop

  当活动的启动模式指定为singleTop,在启动活动时如果发现返回栈的栈顶已经是该活动,则认为可以直接使用它,不会再创建新的活动实例。只有一个实例在栈顶,按一次Back键则退出。这并不代表只有一个该活动的实例在栈中,因为可能不在栈顶的位置也有该活动的实例。

  5.3 singleTask

  当活动的启动模式指定为singleTask,每次启动该活动,系统首先会在返回栈中检查是否存在该东东的实例,如果发现已经存在则直接使用该实例,并把在这个活动之上的所有活动统统出栈,如果没有发现就会创建一个新的活动实例。

  5.4 singleInstance

  指定为singleInstance模式的活动会启用一个新的返回栈来管理这个活动。想象以下场景,假设我们程序中有一个活动是允许其他程序调用的,如果我们想实现其他程序和我们的程序可以共享这个活动的实例,应该怎样实现呢?使用前面三种启动模式肯定做不到的,因为每个应用程序都会有自己的返回栈,同一个活动在不同的返回栈中入栈时必然创建了新的实例。而使用singleInstance模式就可以解决这个问题,在这种模式下会有一个单独的返回栈来管理这个活动,不管是哪个应用程序来访问这个活动,都共用同一个返回栈,也就解决了共享活动实例的问题。

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。