首先我创建了两个页面,,,第一个页面有一个小按钮,,,点击可以跳转到第二个页面
第一个页面代码(为了查询log方便,,我直接写成了中文,,,打开这个页面,,看那个方法的调用顺序来判断activity生命周期)
package com.yiyajing.yyj.youku;
import android.content.Intent;
import android.media.tv.TvContract;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, lifecycleActivity.class);
startActivity(intent);
}
});
Log.v("111111111111111111","我是onCreated");
}
@Override
protected void onStart() {
super.onStart();
Log.v("2222222222222222","我是onstart");
}
@Override
protected void onStop() {
super.onStop();
Log.v("3333333333333333","我是onstop");
}
@Override
protected void onRestart() {
super.onRestart();
Log.v("444444444444444444","我是onRestart");
}
@Override
protected void onResume() {
super.onResume();
Log.v("555555555555555","我是onResume");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.v("666666666666666666","我是销毁...........");
}
@Override
protected void onPause() {
super.onPause();
Log.v("777777777777777777","我是onPause");
}
}
打开APP后log显示:
08-04 13:32:23.711 3502-3502/? V/111111111111111111: 我是onCreated
08-04 13:32:23.711 3502-3502/? V/2222222222222222: 我是onstart
08-04 13:32:23.711 3502-3502/? V/555555555555555: 我是onResume
由此可见:页面首先会创建….创建完成后开始运行onstart,,,然后开始和用户交互的时候调用的onResume方法.
我点击按钮跳转到另一个页面之后走的方法:
08-04 13:41:37.344 3502-3502/com.yiyajing.yyj.youku V/777777777777777777: 我是onPause
08-04 13:41:37.974 3502-3502/com.yiyajing.yyj.youku V/3333333333333333: 我是onstop
解析:
首先是onPause页面消失,暂停和用户交互
然后页面完全被覆盖之后运行了onStop方法.
我返回到第一个页面,,log:
08-04 13:44:27.372 3502-3502/com.yiyajing.yyj.youku V/444444444444444444: 我是onRestart
08-04 13:44:27.372 3502-3502/com.yiyajing.yyj.youku V/2222222222222222: 我是onstart
08-04 13:44:27.372 3502-3502/com.yiyajing.yyj.youku V/555555555555555: 我是onResume
解析:
返回后,,页面重新显示出来,,,走的是onRestart方法
然后开始运行onStart
和用户交互onResume
以上是第一个页面完全被覆盖住的情况
二、这次我在第一个页面上面创建了一个dialog,,,点击按钮就打开dialog,,看一下在页面没有被完全覆盖的情况下,,,Activity的生命周期是怎么走的
(我把点击事件修改成了打开dialog,,代码如下)
public class MainActivity extends AppCompatActivity {
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showDialog();
}
});
Log.v("111111111111111111","我是onCreated");
}
private void showDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("确认退出吗");
builder.setTitle("提示");
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();//关闭对话框
finish(); //结束当前activity
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.create().show(); //创建并显示该对话框
}
1.打开页面走的三个方法如上,,分别是(onCreated,,,onStart,,,onResume)
2.打开dialog后,,,完全没走任何方法,,,也就是说,,这种操作并不会影响activity的运行.
3.点击确定关闭该dialog走的三个方法分别是(暂停和用户的交互onPause,,,,,停止该页面的活动onStop,,,,,,最后是该activity完全被销毁onDestory )
三、还有一种情况:我创建了一个Activity,然后在清单文件里面把这个Activity的样式(theme)改成了Dialog(代码如下)
<activity
android:name=".DialogActivity"
android:theme="@style/Theme.AppCompat.Dialog"></activity>
这样的Dialog对话框是会走生命周期的
分析:因为这种Dialog对话框不会完全覆盖住之前的Activity,所以,当启动这个Dialog对话框的时候,,上一个Activity活动只会走onPause方法,而只有页面退到后台或者完全不可见的时候才会运行onStop方法