一、acrivity的生命周期(参考:https://developer.android.com/reference/android/app/Activity)
系统中activity用栈进行管理。当一个activity启动运行时被放置在栈顶,先前运行activity被压入栈的下一层,并且直到栈顶的activity退出运行时才能被运行。
一个activity有下面四个状态:
1、 Running(运行)状态:此时位于栈顶。
2、 Paused(阻止)状态:这时activity失去焦点仍然能够被看见(当栈顶的activity没有全部覆盖界面或者为透明状态时),保持着所有的状态数据信息,但是这时的activity不能和用户进行交互,并且可能会由于系统的内存不足而被杀死。
3、 Stopped(停止)状态:这时的activity完全被栈顶的activity覆盖,不能被用户看不到,但是也保持着所有的状态数据,并且只要系统需要内存(不一定是内存不足)就可能被杀死。
4、 Finish(完成)状态:当activity被系统从paused状态或者stopped状态要求完成时,将会把activity从内存中撤销,如果再一次被调用,则会重新启动并加载原先的数据。
下面的图展示了activity的状态转化情况:
Activity三个关键循环:
1、 完整生命周期:起始于第一次被创建时的onCreate(Bundle)方法,终止于执行onDestroy()方法。
2、 可视生命周期:起始于onStart()方法,终止于onStop()方法。这个周期内activity可以被用户看到但是不能和用户交互。
3、 前置生命周期:起始于onResume()方法,终止于onPause()方法。这个生命周期内的activity能被用户看到并且可以和用户交互。
一般情况下activity的生命周期执行的动作如下图所示:
二、程序展示
新建两个activity,程序启动时先执行MainActivity.class,再通过MainActivity启动时的onCreate()方法启动InferiorActivity,InferiorActivity启动后再调用MianActivity,在InferiorAcrivity回调MainActivity后执行finish()方法,
代码为:
ManinActivity.java
package com.example.testacitivity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("MainActivity->onCreate","启动");
Intent i=new Intent(this,InferiorActivity.class);
startActivityForResult(i,1);
}
@Override
protected void onStart() {
// TODO 自动生成的方法存根
super.onStart();
Log.d("MainActivity->onStart","启动");
}
@Override
protected void onResume(){
//TODO 自动生成的方法存根
super.onResume();
Log.d("MainActivity->onResume","启动");
}
@Override
protected void onPause() {
// TODO 自动生成的方法存根
super.onPause();
Log.d("MainActivity->onPause","启动");
}
@Override
protected void onStop() {
// TODO 自动生成的方法存根
super.onStop();
Log.d("MainActivity->onStop","启动");
}
@Override
protected void onRestart() {
// TODO 自动生成的方法存根
super.onRestart();
Log.d("MainActivity->onRestart","启动");
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO 自动生成的方法存根
super.onActivityResult(requestCode, resultCode, data);
}
@Override
protected void onDestroy() {
// TODO 自动生成的方法存根
super.onDestroy();
Log.d("MainActivity->onDestroy","onDestroy");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
InferiorActivity.java
package com.example.testacitivity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
public class InferiorActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("InferiorActivity->onCreate","启动");
}
@Override
protected void onStart() {
// TODO 自动生成的方法存根
super.onStart();
Log.d("InferiorActivity->onStart","启动");
}
@Override
protected void onResume(){
//TODO 自动生成的方法存根
super.onResume();
Log.d("InferiorActivity->onResume","启动");
Intent i=new Intent();
setResult(RESULT_OK, i);
finish();
}
@Override
protected void onPause() {
// TODO 自动生成的方法存根
super.onPause();
Log.d("InferiorActivity->onPause","启动");
}
@Override
protected void onStop() {
// TODO 自动生成的方法存根
super.onStop();
Log.d("InferiorActivity->onStop","启动");
}
@Override
protected void onRestart() {
// TODO 自动生成的方法存根
super.onRestart();
Log.d("InferiorActivity->onRestart","启动");
}
@Override
protected void onDestroy() {
// TODO 自动生成的方法存根
super.onDestroy();
Log.d("InferiorActivity->onDestroy","启动");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
执行顺序如下图所示: