Android学习之初识Android-Activity生命周期
在Activity生命周期之前先要说一下Activity栈,Activity栈保存了所有正在运行且没有终止的所有的Activity,Activity也遵循“先进后出”的原则。
Activity的活动状态与Activity在栈中的位置有密切的关系,而且,Android在系统资源不足的时候,也是从Activity栈中选择哪些Activity是可以终止的,一般来讲,Activity系统会优先选择终止处于目前是停止状态并且比较靠近Activity栈底的Activity。
结合实例:
Activity的生命周期是指Activity从启动到销毁的过程。
Activity有四种状态:活动状态 暂停状态 停止状态 非活动状态
先看下Actvity的七个生命周期函数以及说下这几个函数都是在什么时候调用的:
函数 |
是否可终止 |
说明 |
onCreate |
否 |
当Activity第一次启动时将调用这个函数,在这个函数里我们要做的是要进行Activity的初始化,例如创建指定Activity的布局文件、数据的绑定等 |
onStart |
否 |
当Activity显示在屏幕上的时候将调用这个函数 |
onRestart |
否 |
当Activity从停止状态进入活动状态前,将调用这个函数 |
onResume |
否 |
当Activity获得焦点,也就是说Activity能够与用户交互的时候将调用这个函数,这个时刻Activity位于Activity栈的顶端 |
onPause |
是 |
当Activity进入暂停状态将调用这个函数,但在这个时刻我们一般用来保存持久的数据或者释放占用的资源。 |
onStop |
是 |
当Activity完全被遮时将调用这个函数,记住是全部被遮 |
onDestory |
是 |
当Activity在被终止前,即将进入非活动状态前,将调用该函数,一般以下两种情况下会调用onDestory函数1、调用Activity的finish方法2、当Android系统资源不足的时候 |
知道了这些函数和结合上面的图我们来看一个例子来更好的理解下Android的生命周期
- package com.szy.activity;
- import android.app.Activity;
- import android.content.Intent;
- import android.os.Bundle;
- import android.util.Log;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- public class MainActivity extends Activity
- {
- private final static String TAG="MainActivity";
- private Button secondBtn=null;
- private Button thirdBtn=null;
- @Override
- public void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- secondBtn=(Button)findViewById(R.id.secondBtn);
- thirdBtn=(Button)findViewById(R.id.thirdBtn);
- secondBtn.setOnClickListener(listener);
- thirdBtn.setOnClickListener(listener);
- Log.i(TAG, "MainActivity-->onCreate");
- }
- @Override
- protected void onDestroy()
- {
- super.onDestroy();
- Log.i(TAG, "MainActivity-->onDestroy");
- }
- @Override
- protected void onPause()
- {
- super.onPause();
- Log.i(TAG, "MainActivity-->onPause");
- try
- {
- Thread.sleep(2000);
- } catch (InterruptedException e)
- {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- @Override
- protected void onRestart()
- {
- super.onRestart();
- Log.i(TAG, "MainActivity-->onRestart");
- }
- @Override
- protected void onResume()
- {
- super.onResume();
- Log.i(TAG, "MainActivity-->onResume");
- }
- @Override
- protected void onStart()
- {
- super.onStart();
- Log.i(TAG, "MainActivity-->onStart");
- }
- @Override
- protected void onStop()
- {
- super.onStop();
- Log.i(TAG, "MainActivity-->onStop");
- }
- private OnClickListener listener=new OnClickListener()
- {
- @Override
- public void onClick(View v)
- {
- Button btn=(Button)v;
- Intent intent=new Intent();
- switch (btn.getId())
- {
- case R.id.secondBtn:
- intent.setClass(MainActivity.this, SecondActivity.class);
- break;
- case R.id.thirdBtn:
- intent.setClass(MainActivity.this, ThirdActivity.class);
- break;
- }
- startActivity(intent);
- }
- };
- }
- import android.app.Activity;
- import android.os.Bundle;
- import android.util.Log;
- public class SecondActivity extends Activity {
- private static final String TAG = "MainActivity";
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.second);
- Log.i(TAG, "SecondActivity-->onCreate");
- }
- @Override
- protected void onDestroy()
- {
- super.onDestroy();
- Log.i(TAG, "SecondActivity-->onDestroy");
- }
- @Override
- protected void onPause()
- {
- super.onPause();
- Log.i(TAG, "SecondActivity-->onPause");
- }
- @Override
- protected void onRestart()
- {
- super.onRestart();
- Log.i(TAG, "SecondActivity-->onRestart");
- }
- @Override
- protected void onResume()
- {
- super.onResume();
- Log.i(TAG, "SecondActivity-->onResume");
- }
- @Override
- protected void onStart()
- {
- super.onStart();
- Log.i(TAG, "SecondActivity-->onStart");
- }
- @Override
- protected void onStop()
- {
- super.onStop();
- Log.i(TAG, "SecondActivity-->onStop");
- }
- }
- import android.app.Activity;
- import android.os.Bundle;
- import android.util.Log;
- public class ThirdActivity extends Activity
- {
- private static final String TAG = "MainActivity";
- @Override
- public void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.third);
- Log.i(TAG, "ThirdActivity-->onCreate");
- }
- @Override
- protected void onDestroy()
- {
- super.onDestroy();
- Log.i(TAG, "ThirdActivity-->onDestroy");
- }
- @Override
- protected void onPause()
- {
- super.onPause();
- Log.i(TAG, "ThirdActivity-->onPause");
- }
- @Override
- protected void onRestart()
- {
- super.onRestart();
- Log.i(TAG, "ThirdActivity-->onRestart");
- }
- @Override
- protected void onResume()
- {
- super.onResume();
- Log.i(TAG, "ThirdActivity-->onResume");
- }
- @Override
- protected void onStart()
- {
- super.onStart();
- Log.i(TAG, "ThirdActivity-->onStart");
- }
- @Override
- protected void onStop()
- {
- super.onStop();
- Log.i(TAG, "ThirdActivity-->onStop");
- }
- }