3.Activity生命周期

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-05 04:03:09

3.Activity生命周期的相关文章

android学习笔记 activity生命周期&amp;任务栈&amp;activity启动模式

activity生命周期 完整生命周期 oncreate->onstart->onresume->onpause->onstop->ondestory 使用场景:应用程序退出自动保存数据 ondestory oncreate 可视生命周期 onstart->onresume->onpause->onstop 使用场景:应用程序最小化 暂停的操作 onstop onstart 前台生命周期 onresume->onpause 界面用户仍然可见,但是失去焦

Activity生命周期详解

我们来看一下这一张经典的生命周期流程图: 相信不少朋友也已经看过这个流程图了,也基本了解了Activity生命周期的几个过程,我们就来说一说这几个过程. 1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态. 2.当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行. 3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onRe

安卓activity生命周期

相信不少朋友也已经看过这个流程图了,也基本了解了Activity生命周期的几个过程,我们就来说一说这几个过程. 1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态. 2.当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行. 3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态. 4.当前

Android——Activity生命周期(转)

Activity生命周期 子曰:溫故而知新,可以為師矣.<論語> 学习技术也一样,对于技术文档或者经典的技术书籍来说,指望看一遍就完全掌握,那基本不大可能,所以我们需要经常回过头再仔细研读几遍,以领悟到作者的思想精髓. 近来回顾了一下关于Activity的生命周期,参看了相关书籍和官方文档,也有了不小的收获,对于以前的认知有了很大程度上的改善,在这里和大家分享一下. 熟悉javaEE的朋友们都了解servlet技术,我们想要实现一个自己的servlet,需要继承相应的基类,重写它的方法,这些方

Android 第六课——Activity生命周期

声明:本文转载自 http://blog.csdn.net/liuhe688/article/details/6733407 , 感觉读了这篇文章之后,对Activity又是一个更深层次的理解,所以果断手贱转载了!希望自己以后能多看看这篇文章,提升自己! 熟悉javaEE的朋友们都了解servlet技术,我们想要实现一个自己的servlet,需要继承相应的基类,重写它的方法,这些方法会在合适的时间被servlet容器调用.其实android中的Activity运行机制跟servlet有些相似之处

Android Activity 生命周期

生命周期流程图: 相信不少朋友也已经看过这个流程图了,也基本了解了Activity生命周期的几个过程,我们就来说一说这几个过程. 1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态. 2.当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行. 3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运

转:基础总结篇之一:Activity生命周期

熟悉javaEE的朋友们都了解servlet技术,我们想要实现一个自己的servlet,需要继承相应的基类,重写它的方法,这些方法会在合适的时间被servlet容器调用.其实android中的Activity运行机制跟servlet有些相似之处,Android系统相当于servlet容器,Activity相当于一个servlet,我们的Activity处在这个容器中,一切创建实例.初始化.销毁实例等过程都是容器来调用的,这也就是所谓的“Don't call me, I'll call you.”

activity之间参数传递&amp;&amp;获取activity返回值&amp;&amp;activity生命周期

Activity之间参数传递 A activity想将参数传给B activity时可以利用Intent将消息带过去 Intent intent = new Intent(this,BActivity.class); intent.putExtra("xxxx", "xxxx"); 数据量多的话可以使用 Bundle bundle = new Bundle(); intent.putExtras(bundle); 获取activity返回值 A activity调用

Activity生命周期方法的调用顺序工程与测试日志

下面为测试activity的方法的执行顺序   工程与测试资源地址 android工程 AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.finalizetest"

05 Activity 生命周期

protected void onCreate(Bundle savedInstanceState); protected void onStart(); protected void onRestart(); protected void onResume(); protected void onPause(); protected void onStop(); protected void onDestroy(); 主Activity要程序结束之后Finish(); 一般覆盖用onResum