您的位置:首页 > 移动开发 > Android开发

Android四大组件之Activity的生命周期详解

2016-03-30 19:35 761 查看
Android生命周期详解

 

 

Activities在系统中管理着一个Activity栈,当有一个新的Activity启动的时候,新的Activity会在栈顶并且变成一个正在运行状态的Activity,之前的Activity一直会存在栈中,当新的Activity一直存在时,之前的Activity不会再一次出现在前台。

Activity有四种重要的状态

1、如果一个Activity在前台屏幕上,那么它就处于运行状态。

2、如果一个Activity失去了焦点,但是在屏幕上仍然可见,那么它此时的状态处于暂停状态(pause)。一个暂停状态的Activity仍然还活着,但是如果当系统中的内存不足的情况下,它会被系统杀死,系统回收它的内存。

3、如果一个Activity完全被另一个Activity覆盖,那么它此时处于停止状态,它仍然保留着全部的状态信息以及成员信息,由于它对用户不再是可见的,所以它的窗口是隐藏的,当其他地方需要内存时候,它经常会系统被kill掉回收它的内存。

4、如果一个Activity是暂停状态或者停止状态,系统会通过调用finish方法回收它的内存,或者简单的杀死他的进程,当它再一次需要向用户展示的时候,它必须启动至它之前的状态。

 

Activity生命周期方法解析

1、onCreate:当Activity第一次启动的时候被调用,在这个方法里面,一般是做一些初始化工作,例如create views(创建view视图),bind data to lists(给list绑定数据)等等,这个方法还为我们提供了一个带有Activity之前状态的Boudle。它总是跟在onStart方法后面。

2、onRestart:当Activity处于stop状态后调用。总是跟在onStart方法后面。

3、onStart:当Activity对用户可见的时候被调用。如果Activity来自于前台,跟在它后面的是onResume方法,如果Activity变成隐藏,那么跟在他后面的方法是onStop。

4、onResume:当Activity将要启动和用户交互的时候调用,这个时候,你的Activity处于Activity栈的顶端。跟在他后面的方法是onPause。

5、onPause:当系统即将开始恢复以前的活动时调用。通常用于提交未保存更改持久性数据,停止动画和其它可能消耗CPU的事情,等等。此方法的实现必须非常快,因为在方法返回之前,下一个Activity将不恢复。如果这个Activity是从后台返回前台,跟在它后面的方法是onResume,如果它对用户变的不可见,那么跟在它后面的是onStop方法。

6、onStop:当这个Activity不在显示给用户时调用,因为另一个Activity已经被恢复(resumed)并且已经覆盖了它,这可能出现在一个新的Activity正在被启动,或另一个存在的Activity要获得焦点,来到前台界面,又或者这个Activity将要被销毁。跟在它后面的通常有两种方法,如果这个Activity回到前台与用户进行交互,那么就是onRestart方法,如果这个Activity将要被销毁,则它后面的方法就是onDestroy。

7、onDestroy:当这个Activity被销毁的时候调用。

 

Activity从start到destroy的历程

1、Activity刚启动的时候,调用onCreate,onStart,onResume方法。此时Activity处于前台可见的位置。状态为正在运行(Running)。

2、当前Activity被其他Activity覆盖或者屏幕锁屏,系统会调用onPause方法,暂停当前的Activity执行。

3、当前的Activity由覆盖状态回到前台或者屏幕被解锁,系统会调用onResume方法,使Activity再次进入运行状态。

4、当前的Activity跳转到新的Activity界面或者按Home键回到主屏,在后台运行的时候,系统首先会调用onPause方法,然后调用onStop方法,进入停止状态。

5、用户后退回到此Activity时,系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态

6、当前Activity处于不可见状态,系统内存不足的时候,系统会kill当前Activity,当用户退回当前的Activity,此时会再次调用onCreate方法,onStart方法,onResume方法,进入运行状态。

7、退出当前的Activity,系统首先调用onPause方法,然后调用onStop方法,最后调用onDestroy方法,结束当前的Activity。

 

public class MainActivity extends Activity
{

private Button button;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.btn_jump);
button.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
startActivity(new Intent(MainActivity.this, SecondActivity.class));
}
});
System.out.println("MainActivity的onCreate已经被调用了啦啦啦");
}

@Override
protected void onStart()
{
super.onStart();
System.out.println("MainActivity的onStart已经被调用了啦啦啦");
}
@Override
protected void onResume()
{
super.onResume();
System.out.println("MainActivity的onResume已经被调用了啦啦啦");
}
@Override
protected void onRestart()
{
super.onRestart();
System.out.println("MainActivity的onRestart已经被调用了啦啦啦");
}
@Override
protected void onPause()
{
super.onPause();
System.out.println("MainActivity的onPause已经被调用了啦啦啦");
}
@Override
protected void onStop()
{
super.onStop();
System.out.println("MainActivity的onStop已经被调用了啦啦啦");
}
@Override
protected void onDestroy()
{
super.onDestroy();
System.out.println("MainActivity的onDestroy已经被调用了啦啦啦");
}
/*
*重写返回键
*/
@Override
public void onBackPressed()
{
finish();
}


 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: