Android中Activity的生命周期(demo演示,详细)

Activity共4种状态:

1.运行:Activity位于前台,用户可以看见,可以操作
2.暂停:Activity位于前台,用户可以看见,但不能操作
3.停止:Activity不可见,但仍然存在。
4.销毁:Activity结束或所在线程结束,需要重新启动才能再使用。

共7种周期方法控制周期:
1.onCreate():生命周期开始时调用
2.onStart():即将被用户可见时调用
3.onRestart():从停止重新开始时调用
4.onResume():要与用户交互时调用
5.onStop():启动另一个activity时调用,保存当前activity的信息
6.onPause():其他activity覆盖当前activity导致当前activity不可见时调用;当前activity被销毁时调用。
7.onDestroy():完全结束,被销毁时调用

这些周期函数一开始都是空的,需要自己根据对app不同时候的不同功能需求进行重写。在对应的情况下,会自动调用对应的周期方法执行里面的代码。例如,想要在开启时添加动画,可重写onStart()方法。

接下来在demo中使用这些方法并在其中加入日志反馈信息,观察在对activity操作时都调用了哪些周期方法,周期怎么变化:
为了方便对activity进行操作,设置了2个很简单的按钮,1个按钮(jump)控制跳转,1个按钮(close)控制activity关闭。

MainActivity:

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

import java.sql.BatchUpdateException;

public class MainActivity extends Activity {


    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Log.e("tag","onCraet");

        Button jump = (Button) findViewById(R.id.jump);
        Button close = (Button)findViewById(R.id.close);

        jump.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        //点击jump按钮进行activity跳转,跳至JumpActivity
                        Intent intent = new Intent(MainActivity.this,JumpActivity.class);
                        startActivity(intent);
                    }
                }

        );

        close.setOnClickListener(new View.OnClickListener() {
                     @Override
                     public void onClick(View v) {
                         //结束当前activ
                         MainActivity.this.finish();
                     }
                 }

        );


    }

    protected void onStart(){
        super.onStart();
        Log.e("tag","onStart");

    }

    protected void onRestart(){
        super.onRestart();
        Log.e("tag","onRestart");
    }

    protected void onResume(){
        super.onResume();
        Log.e("tag","onResume");
    }

    protected void onPause(){
        super.onPause();
        Log.e("tag","onPause");
    }

    protected void onStop(){
        super.onStop();
        Log.e("tag","onStop");
    }

    protected void onDestroy(){
        super.onDestroy();
        Log.e("tag","onDestroy");
    }
}


MainActivity的xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout

    android:background="#ffffff"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="56dp"
    >
    <Button
        android:id="@+id/jump"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Jump"/>

    <Button
        android:id="@+id/close"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Close"/>


</LinearLayout>

只是空界面的JumpActivity:

import android.app.Activity;
import android.os.Bundle;

public class JumpActivity extends Activity {

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_jump);
    }
}

接下来在Android Studio中点击Logcat进入日志查看窗口:
在这里插入图片描述
在右边下拉框中选择Edit…创建一个Log日志项,输入对应的tag,方便按照Log(tag,message)中的tag查找要查看的日志信息。我创建了testdemo。创建后选择它,运行程序,查看:

结果如下:
①点击运行,进入MainActivity:
在这里插入图片描述
开始一个Activity时:onCreate() → onStart()→ onResume()

②点击Jump按钮,跳转至另一个activity:
在这里插入图片描述
跳转至另一个Activity时:onPause() → onStop()

③返回,回到之前的activity:
在这里插入图片描述
由另一个Activity返回当前Activity时:onRestart() → onStart() → onResume()

④点击Close按钮,关闭activity:
在这里插入图片描述
关闭Activity时:onPause() → onStop → onDestroy()

每部分加蓝色的就是对应操作调用的周期方法。

想要实现app界面不同状态下的不同功能动作,只需要重写相应的周期方法即可。

仍在入门,如有错误,欢迎指出

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值