Android Actitity的生命周期

新建项目,MainActivity代码如下:

package com.wuyudong.lifecycle;

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

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        System.out.println("onCreate");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        System.out.println("onDestroy");
    }
    @Override
    protected void onPause() {
        super.onPause();
        System.out.println("onPause");
    }
    @Override
    protected void onResume() {
        super.onResume();
        System.out.println("onResume");
    }
    @Override
    protected void onStart() {
        super.onStart();
        System.out.println("onStart");
    }
    @Override
    protected void onStop() {
        super.onStop();
        System.out.println("onStop");
    }

}

运行项目,在logcat中查看打印信息:

关闭应用后,打印其他的销毁信息

activity的生命周期

什么是生命周期?
对象从创建到销毁的阶段,必须会执行的方法,这些方法就是生命周期的回调

activity生命周期:
new - gc

oncreate()  activity被创建的时候调用的方法
ui界面的初始化 setContentView()

onStart() activity的界面用户可见
更新ui的操作,播放视频

onDestroy()  activity被销毁的时候调用的方法
界面退出之前的扫尾操作,短信发送器,退出前数据的保存。

onStop() activity的界面用户不再可见
界面不可见,暂停视频播放

onResume()
界面获取到了焦点,按钮可以相应点击事件

onPause()
界面失去了焦点,按钮就不可以相应点击事件

onRestart()
activity被最小化了,并没有销毁,如果下次再去打开这个activity
重新用户界面可见

Activity有三个状态:
1、当它在屏幕前台时(位于当前任务堆栈的顶部),它是激活或运行状态。它就是响应用户操作的Activity。
2、当它失去焦点但仍然对用户可见时(如右图),它处于暂停状态。即在它之上有另外一个Activity。这个Activity也许是透明的,或者没有完全覆盖全屏,所以被暂停的Activity仍对用户可见。暂停的Activity仍然是存活状态(它保留着所有的状态和成员信息并保持和窗口管理器的连接),但系统处于极低内存时仍然可以杀死这个Activity。
3、完全被另一个Activity覆盖时则处于停止状态。它仍然保留所有的状态和成员信息。然而对用户是不可见的,所以它的窗口将被隐藏,如果其它地方需要内存,则系统经常会杀死这个Activity。


当Activity从一种状态转变到另一种状态时,会调用以下保护方法来通知这种变化:
void onCreate(Bundle savedInstanceState)
void onStart()
void onRestart()
void onResume()
void onPause()
void onStop()
void onDestroy()

这七个方法定义了Activity的完整生命周期。实现这些方法可以帮助我们监视其中的三个嵌套生命周期循环:

1、Activity的完整生命周期自第一次调用onCreate()开始,直至调用onDestroy()为止。Activity在onCreate()中设置所有“全局”状态以完成初始化,而在onDestroy()中释放所有系统资源。例如,如果Activity有一个线程在后台运行从网络上下载数据,它会在onCreate()创建线程,而在 onDestroy()销毁线程。

2、Activity的可视生命周期自onStart()调用开始直到相应的onStop()调用结束。在此期间,用户可以在屏幕上看到Activity,尽管它也许并不是位于前台或者也不与用户进行交互。在这两个方法之间,我们可以保留用来向用户显示这个Activity所需的资源。例如,当用户不再看见我们显示的内容时,我们可以在onStart()中注册一个BroadcastReceiver来监控会影响UI的变化,而在onStop()中来注消。onStart() 和 onStop() 方法可以随着应用程序是否为用户可见而被多次调用。

3、Activity的前台生命周期自onResume()调用起,至相应的onPause()调用为止。在此期间,Activity位于前台最上面并与用户进行交互。Activity会经常在暂停和恢复之间进行状态转换——例如当设备转入休眠状态或者有新的Activity启动时,将调用onPause() 方法。当Activity获得结果或者接收到新的Intent时会调用onResume() 方法。关于前台生命周期循环的例子请见PPT下方备注栏。



接下来实践一下:

新建项目,新建activity页面:SecondActivity

布局如下:

<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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="click"
        android:text="打开第二个界面" />

</RelativeLayout>

添加点击事件

    public void click(View view) {
        Intent intent = new Intent(this, SecondActivity.class);
        startActivity(intent);
    }

运行项目,观察logcat打印信息

当出现第一个界面的时候,依次打印的是:onCreate->onStart->onResume

当点击按钮的时候,打印:onPause->onStop

接下来添加第三个按钮

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"
        android:onClick="click2"
        android:text="打开第三个界面" />

添加对应跳转的activity,在清单文件中添加theme

        <!-- android:theme="@android:style/Theme.Dialog" Activity 会显示成对话框的形式 -->
         <activity
            android:theme="@android:style/Theme.Dialog"
            android:name=".ThirdActivity"
            android:label="@string/activity03"
            ></activity>

点击按钮的时候观察logcat打印信息

获取更多C语言与算法相关知识,关注公众号:“csuanfa”

时间: 2024-08-04 09:27:19

Android Actitity的生命周期的相关文章

Android 广播的生命周期 &nbsp;

一:Android 广播的生命周期          一个广播接收者有一个回调方法:void onReceive(Context curContext, Intent broadcastMsg).当一个广播消息到达接收者是,Android调用它的onReceive()方法并传递给它包含消息的Intent对象.广播接收者被认为仅当它执行这个方法时是活跃的.当onReceive()返回后,它是不活跃的. 有一个活跃的广播接收者的进程是受保护的,不会被杀死.但是系统可以在任何时候杀死仅有不活跃组件的进

Android进程的生命周期

Android系统想要永久的保留一个应用进程几乎是不可能的,所以系统就需要不断的释放老的或者不太重要的进程以便腾出足够的内存空间来运行新的或者更重要的进程,那么系统如何决定哪个进程应该保留哪个应该杀死呢,原来系统会根据进程中运行组件以及他们的状态列出一个"重要层级",当内存出现紧张的时候,系统会首先杀死最不重要的进程,接着是第二个,第三个...,以此类推来不断的释放系统资源直到内存不再紧张为止. 根据这个重要层级系统把进程分为了5个级别,下面要说的就是这五种不同的进程类型: 1.for

Android中Service生命周期

这几天面试的时候,反复被问到一个关于Service的问题. 之前做了一个APP.有一个应用场景是,需要开机启动一个Service,在Service中另开一个线程,去对比用户配置中的时间,作出及时提醒. 然后面试的时候在描述该做法时就被问到一个问题,如果Service被系统或者其他应用kill了怎么办?我当时的回答是,在onDestroy中去处理.面试官说,onDestroy并不会被调用. 面试的详情暂且不表,在后期会专门写面经.现在讨论这个问题,Service被kill后生命周期是怎样的. OK

【Android】Activity生命周期(亲测)

测试手机:Nexus 5   系统:4.4 一.测试 测试代码: 1 package com.example.androidalarm; 2 3 import android.app.Activity; 4 import android.content.Context; 5 import android.content.res.Configuration; 6 import android.os.Bundle; 7 import android.util.AttributeSet; 8 impo

Xamarin.Android活动的生命周期

一.前言 用过Android手机的人一定会发现一种现象,当你把一个应用置于后台后,一段时间之后在打开就会发现应用重新打开了,但是之前的相关的数据却没有丢失.可以看出app的“生命”是掌握在系统手上的,而不像Windows上开发的程序. 二.活动的生命周期 这里我们借助一张图帮助我们理解: 当然很多人现在还看不懂这张图,下面我们会逐一介绍: 1.OnCreate 这个方法是打开活动后第一个执行的事件,当然也是我们必须重写的一个方法,其中它大致负责如下的事情: l  创建视图 l  初始化变量 l 

Android Activity的生命周期简单总结

Android Activity的生命周期简单总结 这里的内容参考官方的文档,这篇文章的目的不是去总结Activity是如何启动,如何创造,以及暂停和销毁的,而是从实际开发中分析在Activity各个生命周期,我们应该处理的内容. Activity 各个生命周期 由图可以看出 ,在一个activity的生命周期中,系统会像金字塔模型一样去调用一系列的生命周期回调函数.在最上端是当前Activity的运行状态,也就是说用户彻底看到这个Activity时,Activity正处于onResume()状

Android 屏幕旋转生命周期以及处理方法

工作期间项目需要经常旋转屏幕,还有平板.所以会经常考虑Android 屏幕旋转生命周期,所以也有相应的处理方法.主要有两种办法解决.是根据屏幕旋转的生命周期具体使用.屏幕旋转时候,如果不做任何处理,activity会经过销毁到重建的过程.这种效果都不是想要的. 一.方法一 是在配置文件的activity加上这个 android:configChanges="keyboardHidden|orientation|screenSize"  这句话意思就是配置双引号里面参数意义,软键盘隐藏,

Android Activity Fragment 生命周期

从开源项目中看到 这个,就不由自主的收藏了~ https://github.com/xxv/android-lifecycle Android Activity Fragment 生命周期

android开发之生命周期

android开发之生命周期 一:Activity的生命周期: 这几天了了解了安卓Activity的生命周期,对于生命周期有了大概的理解: 一个Activity的生命周期也就是Activity从生成到运行,到登入其他界面时暂停,再到到当其他界面生成时停止,或者重新进入界面重写启动,直到最后activity被销毁的一系列过程:总的来说Activity是由Activity栈进管理,当来到一个新的Activity后,此Activity将被加入到Activity栈顶,之前的Activity位于此Acti