码迷,mamicode.com
首页 > 移动开发 > 详细

Android基础-Activity生命周期

时间:2021-04-02 13:25:51      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:switch   ext   图片   pack   onrestart   positive   led   ESS   owb   

技术图片

状态说明: onCreate(生成) onStart(启动) onResume(恢复) 

                 onPause(暂停) onStop(停止) onDestroy(销毁) onRestart(重新启动)

生命周期的流程

对于单个Activity的生命周期 

    1.正常启动的时候onCreate-->onStart-->onResume,正常退出时 onPause()->onStop-->OnDestoy()

    2.如果是切换为后台操作, onPause-->onStop,回到当前页面的操作onRestart-->onStart-->onResume 

    3.如果是被更高级别的程序消失,如息屏,则该应用会被强行杀死,重新打开的流程是onCreate-->onStart-->onResume 

多个Activity切换时

    当启动另外一个Activity时,当前Activity:onPause-->onStop,当点击返回按钮时  

    当另外一个Activity退出是,当前activity:onRestart-->onStart-->onResume 

打开界面对话框,即重新打开一个dialog_activity,这里的话需要对AndroidMainfest.xml进行设置 

<activity android:name=".DialogActivity"
      android:theme="@style/Theme.AppCompat.Dialog">
</
activity>

完整代码MainActivity.java

package com.example.lifecycledemo;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

public class MainActivity extends AppCompatActivity {


    //单个Activity的生命周期
    //1.正常启动onCreate-->Onstart-->onReusme, 正常退出onPause-->onStop-->Ondestroy,再次启动 onCreate-->Onstart-->onReusme
    //2.已经处于前台的activity,点击主页按钮离开当前activity, onPause-->onStop,回到activity onRestart-->onStart-->onReusmne
    //3.Activity不可操作onPause-->onStop(如:息屏,打开了其他的Activity),而应用被强行杀死了
    //回到Activity,onCreate-->onStart-->onResume

    //多个Activity切换时
    //当启动另外一个Activity时,当前Acitivity:onPause-->onStop,当点击返回按钮
    //使另外一个Activity退出,当前activity:onRestart-->onStart-->onResume
    //创建方法

    //对话框存在时
    //1.普通对话框对生命周期没有任何影响
    //2.如果有一个Activity伪装成对话框,那么当它启动时,之前的Activity:onPause
    //对话框消失后,回调onResume再次回到前台 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.e("TAG", "onCreate--创建");
    }

    //启动
    @Override
    protected void onStart(){
        super.onStart();
        Log.e("TAG", "onCreate--启动");
    }

    //恢复
    @Override
    protected void onResume() {
        super.onResume();
        Log.e("TAG", "onCreate--恢复");
    }

    //暂停
    @Override
    protected void onPause() {
        super.onPause();
        Log.e("TAG", "onCreate--暂停");
    }

    //停止
    @Override
    protected void onStop() {
        super.onStop();
        Log.e("TAG", "onCreate--停止");
    }

    //销毁
    @Override
    protected void onDestroy(){
        super.onDestroy();
        Log.e("TAG", "onCreate--销毁");
    }

    //重启
    @Override
    protected void onRestart() {
        super.onRestart();
        Log.e("TAG", "onCreate--重启");
    }

    public void myclick(View view) {
        switch (view.getId()) {
            case R.id.btn1: //启动第二个activity
                //参数1::环境上下文
                //参数2:跳转的Activity的对象
                Intent intent = new Intent(this, MainActivity2.class);
                startActivity(intent);
                break;
            case R.id.btn2: //打开对话框
                //普通对话框不会影响生命周期
                AlertDialog.Builder builder = new AlertDialog.Builder(this);
                builder.setTitle("提示")
                        .setMessage("这是一条提示:请认真观察生命周期的变换")
                        .setPositiveButton("确定", null).show();
                break;
            case R.id.btn3://界面(本质)对话框样式
                Intent it2 = new Intent(this, DialogActivity.class);
                startActivity(it2);

                break;

        }
    }
}

activity_main.xml 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical">

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="myclick"
        android:id="@+id/btn1"
        android:text="打开第二个界面"
        android:layout_margin="15dp" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="myclick"
        android:text="打开对话框"
        android:id="@+id/btn2"
        android:layout_margin="15dp"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="myclick"
        android:text="打开界面对话框"
        android:id="@+id/btn3"
        android:layout_margin="15dp"/>



</LinearLayout>

技术图片

MainActivity2.java 用于其他页面的切换

package com.example.lifecycledemo;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

public class MainActivity2 extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
    }
}

activity_main2.xml 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity2">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="第二个界面" />


</LinearLayout>

技术图片

打开界面对话框,用于生成一个界面activity

DialogActivity.java 

package com.example.lifecycledemo;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

public class DialogActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dialog);
    }
}

activity_dialog.xml 

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".DialogActivity">


    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

AndroidMainfest.xml 需要对对话框的activity进行设置主题 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.lifecycledemo">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.Lifecycledemo">
        <activity android:name=".DialogActivity"
            android:theme="@style/Theme.AppCompat.Dialog"></activity>
        <activity android:name=".MainActivity2" />
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

 

Android基础-Activity生命周期

标签:switch   ext   图片   pack   onrestart   positive   led   ESS   owb   

原文地址:https://www.cnblogs.com/my-love-is-python/p/14608885.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!