您的位置:首页 > 其它

通过实例来了解Activity生命周期

2016-12-07 20:51 155 查看
简单的实例,通过这个实例来更加充分的了解Activity生命周期在多个Activity中切换时内置方法加载顺序,有误请指正,不喜勿喷。

MainActivity.class—–>作为Activity A

package com.jikexueyuan.activitylifecircle;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

public class MainActivity extends Activity {

@Override
protected void onDestroy() {
super.onDestroy();
Log.e("TAG", "A ------  onDestroy()");
}

@Override
protected void onPause() {
super.onPause();
Log.e("TAG", "A ------  onPause()");
}

@Override
protected void onRestart() {
super.onRestart();
Log.e("TAG", "A ------  onRestart()");
}

@Override
protected void onResume() {
super.onResume();
Log.e("TAG", "A ------  onResume()");
}

@Override
protected void onStart() {
super.onStart();
Log.e("TAG", "A ------  onStart()");
}

@Override
protected void onStop() {
super.onStop();
Log.e("TAG", "A ------  onStop()");
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.e("TAG", "A ------  onCreate");
setContentView(R.layout.activity_main);
findViewById(R.id.btn_Bact).setOnClickListener(
new View.OnClickListener() {

@Override
public void onClick(View resource) {
startActivity(new Intent(MainActivity.this,
Bactivity.class));
}
});
}

}


Bactivity.class ————–>作为B—activity

package com.jikexueyuan.activitylifecircle;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class Bactivity extends Activity {
@Override
protected void onDestroy() {
super.onDestroy();
Log.e("TAG", "B ------  onDestroy()");
}

@Override
protected void onPause() {
super.onPause();
Log.e("TAG", "B ------  onPause()");
}

@Override
protected void onRestart() {
super.onRestart();
Log.e("TAG", "B ------  onRestart()");
}

@Override
protected void onResume() {
super.onResume();
Log.e("TAG", "B ------  onResume()");
}

@Override
protected void onStart() {
super.onStart();
Log.e("TAG", "B ------  onStart()");
}

@Override
protected void onStop() {
super.onStop();
Log.e("TAG", "B ------  onStop()");
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.e("TAG", "B ------  onCreate");
}

}


下图是在正常情况下,从MainActivity到Bactivity,再按Back键回到MainActivity,各个方法的加载顺序,这里Bactivity完全覆盖MainActivity。

Bactivity-->MainActivity" title="">

备注:从图片可以看出,方法onCreate(),onStart(),onResume()先加载出来,这个时候加载方法onPause()暂停MainActivity后,加载Bactivity,Bactivity还是按照onCreate(),onStart(),onResume()顺序加载,加载了这三个方法之后,MainActivity开始执行onStop()方法;当按照了Back键后,Bactivity开始onPause(),暂停之后加载MainActivity,MainActivity开始重启了,执行方法onRestart(),onStart(),onResume(),后执行Bactivity的方法onStop(),onDestory().

下图是将Bactivity主图设置为android:theme="@android:Theme.Dialog"/时,Bactivity只是弹出对话框,不能完全覆盖活动MainActivity,MainActivity处于可见状态的情况下各个方法的加载顺序:


Bactivity-->MainActivity" title="">

备注:先执行MainActivity的三个固定方法onCreate(),onStart(),onResume(),然后执行暂停方法onPause(),开始加载Bactivity中的方法;

但是在显示Bactivity中,MainActivity并没有执行方法onStop()方法,这是两者的区别。

总结:总体来说区别还是有的,在实际情况下可能还会更加复杂,先从简单的理解吧
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Activity