Antivity的生命周期

来源:互联网 发布:淘宝联盟能赚钱吗 编辑:程序博客网 时间:2024/06/08 00:34

首先我创建了两个页面,,,第一个页面有一个小按钮,,,点击可以跳转到第二个页面
第一个页面代码(为了查询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;

@Overrideprotected 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");}@Overrideprotected void onStart() {    super.onStart();    Log.v("2222222222222222","我是onstart");}@Overrideprotected void onStop() {    super.onStop();    Log.v("3333333333333333","我是onstop");}@Overrideprotected void onRestart() {    super.onRestart();    Log.v("444444444444444444","我是onRestart");}@Overrideprotected void onResume() {    super.onResume();    Log.v("555555555555555","我是onResume");}@Overrideprotected void onDestroy() {    super.onDestroy();    Log.v("666666666666666666","我是销毁...........");}@Overrideprotected 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;

@Overrideprotected 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方法