Android问题:Activity生命周期事件

四状态:活跃、暂停、停止、销毁。

当Android中Activity在运行的时候,Activity的活动状态由Android和Activity栈的形式管理。当前活动的Activity位于栈顶。

随着不同应用的运行,每个Activity都可能在活动状态和非活动状态之间切换。

活跃:用户启动,在前台运行,可获得焦点;

暂停:运行且可见,但是被某通知或者事件覆盖掉了,用户可以看到activity但是不能与之交互,不能获得焦点;

停止:被启动的其他activity隐藏掉了,应用程序无法向用户展示任何有意义的内容,失去焦点;

死亡:activity结束,或者activity的dalvik进程结束,可能是因为内存不足或者其他原因。


在activity的生命周期中,以下方法会被回调:

onCreate(Bundle savedStatus):创建activity时被回调;

onStart():启动activity时被回调;

onRestart():重启activity时被回调:

onResume():恢复activity时被回调:

onPause():暂停时被回调:

onStop():停止activity时被回调;

onDestroy():销毁activity时被回调。

开发activity的时候,可以根据需要选择性的覆盖指定方法,最常见的是覆盖onCreate()方法,用于对该activity的初始化。

当然,也可以覆盖onPause()方法,暂停该activity去做其他的事情。

代码实例:

@Override
public void onSop()
{
      super.onStop();
       //TODO SOMETHING
 
}

onCreate()和onDestroy():

activity首次启动的时候,使用一个null参数调用onCreate();

activity已经运行,如果在随后的某个时刻被结束,将使用来自onSaveInstanceState()的Bundle作为参数调用onCreate(),但是如果是将activity设置为不同的手机状态提供不同的资源,那么将重新创建activity并且调用onCreate()。这都是需要一次性完成的操作。


生命周期的另外一端,activity关闭时会调用onDestroy(),这可能是因为activity调用了finish()来完成activity,也可能是内存不够需要关闭activity。

onDestroy()其实就是为了释放在onCreate()中获得的资源。


onStart()、onRestart()和onStop():

activity在前台运行的时候,可能是因为他首次启动,也可能是在被某个activity或者呼入电话隐藏了以后再次被调用回到前台,这样就需要onStart();

停止后重新启动activity,将调用onRestart()方法;

停止activity将要调用onStop()方法。


onPause()和onResume():

在activity被启动后,不管是首次还是隐藏后的启动、还是停止后的启动,回到前台之前要调用onResume()。

可以在此时通过用户上一次查看activity之后可能发生的操作来刷新的一次UI;.

但是,如果要用户远离activity的任何操作,那么要onPause(),而撤销在onResume()中的操作,比如停止后台线程,释放所获得的独占访问资源.

调用onPause()后,Android可以在任何时候结束activity的进程。


如果activity能够保存下来应用程序实例的状态是最好的,这样方便应用程序间进行切换。

实例状态的保存应该由onSaveInstanceState()处理。它提供一个Bundle,activity可以向bundle填充需要的任何数据(计算器显示的数据等),此方法实现需非常快,放入数据快速退出。

该实例状态在onCreate()和onRestoreInstanceState()中再次提供。重新需要获得activity的状态时,这两调用可以根据具体情况用一个。


Activity与severlet的相似之处:

都向用户呈现界面;都继承系统的基类;开发后都需要进行配置;他们的方法都需要系统以回调的方式来调用;都有各自的生命周期,各自的生命周期都由于外部负责管理;

都不哼直接相互调用,不能直接进行数据交换,activity之间的数据交换需要借助于Bundle;activity最终会以窗口的形式呈现,但是servlet向浏览者生成文本响应;activity的本质

是通过各种界面组件搭建界面;activity之间的跳转实现由Intent意图来控制,servlet需要用户请求才能实现。












你可能感兴趣的:(Android问题:Activity生命周期事件)