Antivity的生命周期

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值