1.3Activity生命周期

Activity的生命周期:

我们能监控Activity生命周期中的三个嵌套循环(monitor three nested loops in the activity lifecycle)

 1.Activity的entire lifetime(全部的生命期)发生在

                              调用onCreate()和调用onDestory()之间。

        在onCreate()方法中执行全局状态的建立(例如定义布局),在onDestroy()方法中释放所有保存的资源。

       

 

       2.Activity的visible lifetime(可见的生命期)发生在

                              调用onStart()onStop()之间。

         在这个期间,用户能在屏幕上看见Activity,和它进行交互。

        系统在Activity的完整寿命中可能多次调用onStart()和onStop(),正如Activity交替地对用户可见或隐藏。

 

      3Activity的foreground lifetime (前台的生命期)发生在

                               调用onResume()onPause()之间。

       在这期间,Activity在屏幕上所有其他Activity的前面,有用户输入焦点。

       一个Activity能频繁的在前台进入和出去之间转变。

Demo:两个Activity,MainActivity和NextActivity和一个按钮。点击按钮,由MainActivity跳转到NextActivity。

Manifest.xml:清单文件

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <!--dialog不会调用onStop-->
        <!--<activity android:name=".NextActivity" android:theme="@android:style/Theme.Dialog">-->
        <activity android:name=".NextActivity"></activity>
    </application>

</manifest>

MainActivity.java

package com.manusas.activitylifecycle;

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

public class MainActivity extends Activity {
    private static final String TAG = "loginfo";
    private Button button;

    //回退
    //创建Activity
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Log.i(TAG, "------onCreate-----");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button) this.findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(MainActivity.this, NextActivity.class);
                startActivity(i);
            }
        });
    }

    //Activity快要可见
    @Override
    protected void onStart() {
        Log.i(TAG, "------onStart-----");
        super.onStart();
    }

    //Activity变成可见的,处于运行状态
    @Override
    protected void onResume() {
        Log.i(TAG, "------onResume-----");
        super.onResume();
    }

    //其他Activity获得用户焦点,(Activity快要暂停了)
    @Override
    protected void onPause() {
        Log.i(TAG, "------onPause-----");
        super.onPause();
    }

    //Activity不再可见,处于停止状态
    @Override
    protected void onStop() {
        Log.i(TAG, "------onStop-----");
        super.onStop();
    }

    //Activity又要快可见了
    @Override
    protected void onRestart() {
        Log.i(TAG, "------onRestart-----");
        super.onRestart();
    }

    //Activity快要被销毁了
    @Override
    protected void onDestroy() {
        Log.i(TAG, "------onDestroy-----");
        super.onDestroy();
    }
}

NextActivity.java

package com.manusas.activitylifecycle;

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

public class NextActivity extends Activity {
    private static final String TAG = "lognext";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Log.i(TAG, "------onCreateNext-----");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_next);
    }

    @Override
    protected void onStart() {
        Log.i(TAG, "------onStartNext-----");
        super.onStart();
    }

    @Override
    protected void onResume() {
        Log.i(TAG, "------onResumeNext-----");
        super.onResume();
    }

    @Override
    protected void onPause() {
        Log.i(TAG, "------onPauseNext-----");
        super.onPause();
    }

    @Override
    protected void onStop() {
        Log.i(TAG, "------onStopNext-----");
        super.onStop();
    }

    @Override
    protected void onRestart() {
        Log.i(TAG, "------onRestartNext-----");
        super.onRestart();
    }

    @Override
    protected void onDestroy() {
        Log.i(TAG, "------onDestroyNext-----");
        super.onDestroy();
    }
}

activity_main.xml:主页

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="跳转"
        android:id="@+id/button"
        android:layout_alignParentTop="true"
        android:layout_alignParentStart="true" />
</RelativeLayout>

activity_next.xml:跳转页

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <TextView android:text="Ok!" android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</RelativeLayout>

1. 运行应用,MainActivity运行。

可以看出一个Activity运行调用的回调方法是:onCreate()->onStart()->onResume()

2. 点击跳转按钮,由MainActivity跳转到NextActivity:

1>NextActivity是Dialog。

由于NextActivity是Dialog,所以MainActivity依然可见,所以只调用了它的onPause()方法。

2>若将NextActivity改为不是Dialog(只需在Manifest.xml文件中删掉 android:theme="@android:style/Theme.Dialog"这一行即可)

对于MainActivity,由于不可见,状态由运行变为停止。

依次调用了它的回调方法:onPause()->onStop()

3.Activity处于运行状态时,点击返回按钮。

点击返回按钮,Activity由运行状态变为死亡状态,依次调用它的回调方法:onPause()->onStop()->onDestroy()

4.Activity处于运行状态,点击主页按钮,返回桌面。

Activity由运行状态变为停止状态,依次调用它的回调方法:onPause()->onStop()

5.Activity处于停止状态,即由桌面返回到Activity。

停止->运行,依次调用回调方法:onRestart()->onStart()->onResume()

6.Activity处于运行状态,旋转屏幕:

可以看出,旋转屏幕是一个销毁Activity然后重新创建Activity的过程。

运行->暂停->停止->死亡->运行

依次调用回调方法:onPause()->onStop->onDestroy()->onCreate()->onStart()->onResume()

7.Activity处于运行状态,手机此时锁屏。

可以看出,手机锁屏,此时由于Activity不可见,会进入停止状态。

依次调用回调方法:onPause()->onStop()

8.当应用正在运行时,手机锁屏,然后解锁回到应用界面。

可以看出应用从停止状态恢复到运行状态。

依次调用回调方法:onRestart()->onStart()->onResume()

时间: 2024-11-12 22:22:52

1.3Activity生命周期的相关文章

Android四大组件之——Activity的生命周期(图文详解)

上一篇文章讲了Activity的定义.状态和后退栈,现在讲讲Activity的重点和难点——Activity的生命周期. Activity生命周期的回调方法: //创建Activity public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } //Activity快要变成可见的 @Override protected void onStart() { super.onStart(

3.Activity生命周期

Activity的生命周期: 我们能监控Activity生命周期中的三个嵌套循环(monitor three nested loops in the activity lifecycle)  1.Activity的entire lifetime(全部的生命期)发生在                               调用onCreate()和调用onDestory()之间.         在onCreate()方法中执行全局状态的建立(例如定义布局),在onDestroy()方法中释

iOS程序执行顺序和UIViewController 的生命周期(整理)

说明:此文是自己的总结笔记,主要参考: iOS程序的启动执行顺序 AppDelegate 及 UIViewController 的生命周期 UIView的生命周期 言叶之庭.jpeg 一. iOS程序的启动执行顺序 程序启动顺序图 iOS启动原理图.png 具体执行流程 程序入口进入main函数,设置AppDelegate称为函数的代理 程序完成加载[AppDelegate application:didFinishLaunchingWithOptions:] 创建window窗口 程序被激活[

android Activity 的生命周期 以及横屏竖屏切换时 Activity 的状态变化

生命周期Android 系统在Activity 生命周期中加入一些钩子,我们可以在这些系统预留的钩子中做一些事情.例举了 7 个常用的钩子:protected void onCreate(Bundle savedInstanceState)protected void onStart()protected void onResume()protected void onPause()protected void onStop()protected void onRestart()protecte

连载《一个程序猿的生命周期》-《发展篇》- 12.向生活妥协的选择之路,你也面临吗?

本篇文章的主角是第二个加入我们团队的,暂且称他为G兄.是我第二家公司的同事,但是当时并没有交集,后来经过其他同事说起,被我招过来的.关于第二家公司的情况,请参见<而立之年,第一次跳槽,寻求转型> 在加入我们团队之前,G兄在一个不大不小的公司做内部OA系统,众所周知不会有什么太大发展,他当时也不太满意.在和他交流的过程中,我说的很直接:1.开发公司内部OA,并非公司实际产品,无法直接创造利润,就算是公司的产品,现在做OA的多了去了.2.OA开发完成后,只剩运维人员,假设裁掉一部分人员的话,你怎么

【Vue】详解Vue生命周期

Vue实例的生命周期全过程(图) (这里的红边圆角矩形内的都是对应的Vue实例的钩子函数) 在beforeCreate和created钩子函数间的生命周期 在beforeCreate和created之间,进行数据观测(data observer) ,也就是在这个时候开始监控data中的数据变化了,同时初始化事件 created钩子函数和beforeMount间的生命周期 对于created钩子函数和beforeMount间可能会让人感到有些迷惑,下面我就来解释一下: el选项的有无对生命周期过程

vue 生命周期初探

vue 以后发之势加上其独有的特性(压缩后很小),轻量级的MVVM框架,目前github star已有5.94万,而react 7万.由此可见是两个非常热门前端框架.这里就vue的生命周期做个初步体验. 发现看视频,动手之后,过段时间还是会忘,所以写一篇短文以备不时之需. 先附上官网的图片:vue生命周期 生命周期的钩子函数如果使用得当,会大大增加开发效率: 生命周期实践: 为了更好的查看beforeUpdate.updated,beforeDestroy,destroy钩子函数,使用v-on绑

1.2软件生命周期&amp;测试流程

软件的生命周期 可行性分析-需求分析-软件设计-软件编码-软件测试-软件维护 1.可行性分析 主要确定软件开发的目的和可行性(PM) 2.需求分析 对软件的功能进行详细的分析(PM),输出需求规格说明书(原型图) 3.软件设计(DEV) 把需求分析得到的结果转换为软件结构和数据结构,形成系统架构 概要设计:搭建架构.模块功能.接口连接和数据传输 详细设计:模块深入分析,对各模块组合进行分析,伪代码   包含数据库设计说明 4.软件编码(DEV) 可运行的程序代码 5.软件测试 5.1.单元测试(

ASP.NET页面生命周期与控件生命周期

ASP.NET页面生命周期 (1)PreInit 预初始化(2)Init 初始化(3)InitComplete 初始化完成(4)PreLoad 预加载(5)Load 加载(6)LoadComplete 加载完成(7)PreRender 预输出(8)PreRenderComplete 预输出完成(9)Unload 卸载 ASP.NET控件生命周期 -- 实例化(Instantiate) 控件被页面或另一个控件通过调用它的构造器所实例化.这个步骤之后所列出的阶段,仅当控件加入控件树中才会发生. --