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,生命周期方法是不执行的。