关于Activity生命周期的7种情况

个人自学总结

先掏出Activity生命周期的这张图.


全文都需要重写MainActivity.java中所有关于生命周期的方法


@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    Log.i(TAG, "onCreate");

}

@Override

protected void onStart() {

super.onStart();

    Log.i(TAG, "onStart");

}

@Override

protected void onResume() {

super.onResume();

    Log.i(TAG, "onResume");

}

@Override

protected void onRestart() {

super.onRestart();

    Log.i(TAG, "onRestart");

}

@Override

protected void onPause() {

super.onPause();

    Log.i(TAG, "onPause");

}

@Override

protected void onStop() {

super.onStop();

    Log.i(TAG, "onStop");

}

@Override

protected void onDestroy() {

super.onDestroy();

    Log.i(TAG, "onDestroy");

}


一、点击back对Activity生命周期的影响


按顺序一次出现onCreate->onStrat->onResume

正常进入后点击back

点击back->发现此时直接被杀死了!(onPause->onStop->onDestory)

***直接Destroy了!!!!***


二、点击home对Activity生命周期的影响

不再付打开的及图片啦

进入程序后点击home键返回

只出现了onPause->onStop

***注意区分和上面的区别***

然后我们分别尝试

    从任务管理器

    点击icon返回程序

前面为通过任务管理器返回/蓝色为点击icon结果

此时可以看到结果一样


三、横屏对Activity生命周期的影响

***必须真机调试,要打开旋转功能才能实现***

正常进入程序后我们旋转手机横屏

蓝色部分为横屏后的结果

此时我们看到横屏之后activity自动onPause->onStop->onDestory然后重新onCreate->onStrat->onResume了一个新的Activity!

关于横屏数据保存

旋转屏幕的数据保存 - 简书


**以下情况都需要对activity_main.xml进行如下更改**

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent">

        android:id="@+id/but"

        android:text="一个按钮"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:onClick="but_onClick"

        />

</LinearLayout>


四、弹Dialog时对Activity生命周期的影响

推荐个关于dialog的文章

Android 系统原生dialog使用 - 简书

先在MainActivity添加一段关于Dialog代码如下

public void but_onClick(View view) {

builder =new AlertDialog.Builder(this)

.setIcon(R.mipmap.ic_launcher)

.setTitle("Dialog")

.setMessage("一个dialog")

.setPositiveButton("确定", (dialogInterface, i) -> Toast.makeText(this, "确定按钮", Toast.LENGTH_LONG).show())

.setNegativeButton("取消", (dialogInterface, i) -> {

Toast.makeText(this, "关闭按钮", Toast.LENGTH_LONG).show();

                dialogInterface.dismiss();

            });

    builder.create().show();

}


运行一下

打开应用

按顺序一次出现

onCreate->onStrat->onResume

点击按钮打开dailog

此时logcat页面并没有任何变化,Activity生命周期没有任何变化


退出应用

正常显示

onPause->onStop->onDestory

结束


五、弹PopupWindow时对Activity生命周期的影响

*****不出意外效果一样*****

public void but_onClick(View view) {

View vi = LayoutInflater.from(this).inflate(R.layout.popup, null, false);

    final PopupWindow popWindow =new PopupWindow(vi, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, true);

    popWindow.showAsDropDown(view, 50, 0);

}

popup.xml

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

    xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent">

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="Activity1"

        />

</LinearLayout>



六从主Activity上弹出一个半屏Activity对主Activity生命周期的影响

*****不出意外效果还是一样*****

package com.hrk.activity3;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

public class Activity2extends AppCompatActivity {

@Override

    protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_2);

        android.view.WindowManager.LayoutParams p = getWindow().getAttributes();

        p.height =1000;

        getWindow().setAttributes(p);

    }

}

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

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="30dp">

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="Activity2"

        />

</FrameLayout>

public void but_onClick(View view) {

Intent intent =new Intent(this, Activity2.class);

    startActivity(intent);

}


七、从主Activity跳转到另一个Activity对主Activity生命周期的影响

先在MainActivity添加一段关于Dialog代码如下

public void but_onClick(View view) {

Intent intent =new Intent(this, Activity2.class);

    startActivity(intent);

}

然后再创建一个 Activity2.class

正常启动后点击按钮

跳转到第二个页面

此时我们可以看到主Activity并没有onDestory

点击back返回

正常返回
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容