Android生命周期估计连初学者都再熟悉不过的东西了,但这里我抛出几个问题,或许大家以前没有想过或者可能认识的有些错误。
一、当A启动B时,A和B生命周期方法执行的先后顺序是怎样的?当按返回键返回时,又是怎样的?(读者可以先想想,可能会跟你的答案不一致)
A--->B时,打印结果如下:
按返回键B--->A,打印结果如下:
结论:先执行当前显示Activity的onPause方法,接着执行完将要显示Activity的生命周期方法,最后再执行当前显示Activity的其它生命周期方法
二、生命周期onPause 弹出的新窗体是指Activity的还是任意的,比如Dialog
上代码:
import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class AActivity extends Activity {
private static final String TMG = "ActivityTask";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i(TMG, "AActivity onCreate");
setContentView(R.layout.layout_task);
Button _buttonStartB = (Button) findViewById(R.id.buttonStartB);
_buttonStartB.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(AActivity.this);
builder.setTitle("Pick a color");
AlertDialog alert = builder.create();
alert.show();
}
});
}
@Override
protected void onResume() {
super.onResume();
Log.i(TMG, "AActivity onResume");
}
@Override
protected void onPause() {
super.onPause();
Log.i(TMG, "AActivity onPause");
}
@Override
protected void onRestart() {
super.onRestart();
Log.i(TMG, "AActivity onRestart");
}
@Override
protected void onStart() {
super.onStart();
Log.i(TMG, "AActivity onStart");
}
@Override
protected void onStop() {
super.onStop();
Log.i(TMG, "AActivity onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i(TMG, "AActivity onDestroy");
}
}
执行完代码之后,点击弹出对话框按钮我们发现AActivity的生命周期方法没有打印
结论:onPause弹出的新窗体必须是Activity才行,如果是Dialog,生命周期方法是不执行的。