Activity

来源:互联网 发布:电池模拟器软件 编辑:程序博客网 时间:2024/06/06 07:48

一、Activity的生命周期
这里写图片描述
二、回调函数
覆写这些回调函数时,首先要记得一定要调用基类的回调函数,即最开始一行永远是super.onXXX();
  onPause()和onResume()中的动作应该互逆,比如说onPause()中释放了相机,那么onResume()中就要重新初始化相机。
  Stopped状态下,UI对用户完全不可见,此时用户焦点在另一个activity或者另一个程序上。
  onStop()中需要释放资源,因为有时候系统会kill掉Stopped状态的进程,如果有资源没有被释放,会造成内存泄露。
  onStop()中还应该包括一些关闭操作,比如向数据库写信息。
  当从Stopped状态回到前景时,首先需要调用onRestart(),这个函数做一些恢复工作,恢复停止但是并没有被销毁的activity;然后系统会接着调用onStart(),因为每次activity变为可见时都要调用onStart()。
  可以把onStart()和onStop()看成一对,因为在一开始启动时和重新启动时都需要做一些初始化工作。
  onDestroy()一般都是在onPause()和onStop()之后调用,但有一个例外的情况:如果在onCreate()中调用finish()方法,系统将会立即调用onDestroy()而不用经过生命周期中的其他阶段。
三、Activity生命周期进程类型
在Android系统中,即使不关掉程序,当应用程序处于某种进程类时,也有可能被系统kill掉。
运行中的应用程序分为五大类,分别是:
    前景模式:foreground process
    可见模式:visible process
    背景模式:background process
    空白模式:empty process
    服务模式:service process
 1、foreground process(前景模式)是当前显示于手机屏幕上的应用程序画面,被定义为前景模式的进程,其中由onCreate()、onStart() 、onResume() 函数调用的Activity都会变成foreground process正在运行的Activity。
 2、visible process(可见模式):visible process最常发生的情况是当应用程序弹出对话框要与用户交互时,原应用程序就会变成透明(不可见)的,而对话窗口就会变成前景。当对话窗口退出后,原应用程序马上就又变回原前景模式了。在Activity窗口画面变为透明时,就会由onPause()函数掌控进入暂停状态。当前景进程退出时,该Activity就会再度被拉到前景模式,由onResume() 函数唤醒。
 3、background process是在Activity窗口画面被其他Activity完全盖掉,窗口画面已经完全看不见时,则会进入onStop()停止状态。
  这种情况通常发生在两个不同的应用程序开启时,后开启的应用程序会覆盖掉原应用程序。
  此时对background process Activity的处理有两种选择:一是直接被onDestroy()退出,该程序将完全关闭,无法再使用任何返回键回到该程序;另一个处理方式是当其他Activity需要内存时,这个background process会先被清除掉,释放出内存。
  如果使用者再度浏览刚刚被清除掉的background process,则Android系统会自动再运行onCreate()重新启动该Activity,所以当系统需要内存时,就会暂时将背景进程清除,让它变成empty process(空白模式) , 所以空白进程最重要的目的就是暂时释放出内存,直到使用者再度唤醒该empty process Activity时,才会将空白进程变成前景进程。
  4、service process(服务模式进程)是由startService()所产生的,虽然服务进程有点类似背景进程在背景状态运行,但是它的运行等级和前景进程几乎一样高。
  服务模式进程是持续运行的,虽然使用者看不到任何运行画面,Android系统不会自动关闭此类的服务进程,除非使用者自行关闭。
四、Activity四种启动模式
Activity启动模式设置:

四种启动模式:
standard :模式启动模式,每次激活Activity时都会创建Activity,并放入任务栈中。
singleTop :如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,否者就会创建新的实例并放入栈顶(即使栈中已经存在该Activity实例,只要不在栈顶,都会创建实例)。
singleTask:如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的onNewIntent())。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中。
singleInstance:在一个新栈中创建该Activity实例,并让多个应用共享改栈中的该Activity实例。一旦改模式的Activity的实例存在于某个栈中,任何应用再激活改Activity时都会重用该栈中的实例,其效果相当于多个应用程序共享一个应用,不管谁激活该Activity都会进入同一个应用中。

0 0
原创粉丝点击