四大组件之一:Activity

Activity生命周期

这里写图片描述
Activity是应用程序的表现层,应用程序中的每个屏幕显示都通过继承和扩展基类Activity来实现的.一个应用程序中可以包含多个Activity,它们之间可以相互跳转,来达到手机屏幕之间的相互切换。Activity利用View来实现应用程序的图形用户界面GUI),而手机用户则直接通过GUI和应用程序进行交互,如应用程序通过GUI向用户显示信息,用户通过GUI向应用程序发出指令和响应。
——Activity使用的步骤:
(1)创建Activity,创建类继承Activity或其子类
(2)配置Activity
必须显式在Manifest配置文件中为其添加,为配
置android:name属性,值为.className

——Activity栈
Android系统中,所有的Activity被保存在Activity栈中,当启动一个新的Activity时,这个Activity就被压入Activity栈顶部,如果用户通过”返回”键回到上一个Activity的界面,那么栈顶的Activity将会被弹出,之前位于栈顶的第二个Activity就变成为新的栈顶Activity,并显示在屏幕上。所以当前显示在用户面前的Activity都是栈顶元素。

——Activity生命周期
掌握活动的生命周期对任何Android开发者来说都非常重要,当你深入理解活动的生命周期之后,就可以写出更加连贯流畅的程序,并在如何合理管理应用资源方面,你会发挥的游刃有余。你的应用程序将会拥有更好的用户体验。
Activity的生命周期是指一个Activity从创建到销毁的过程,期间可能经历多个状态的变化,每次状态的变化都会触发相应的回调方法。
注意说明:
Activity创建配置完成之后,至于该Activity何时被实例化,它的方法何时被调用,Activity何时结束等,对开发者来说是完全透明的。而是由android系统决定的。
Activity的回调机制:当Activity被部署在Android应用中之后,随着应用程序的运行,Activity会不断地在不同的状态之间切换,该Activity中特定的方法就会被回调,那么开发者就可以选择性的重写这些方法来加入业务相关的处理。
当Activity处于Android应用中运行时,它的活动状态由Android以Activity栈的形式管理。当前活动的Activity位于栈顶,随着不同应用的运行,每个Activity都有可能从活动状态转入非活动状态,也可能从非活动状态转入活动状态。
所以将Activity生命周期分为四个阶段:
运行状态:可见,并且可操作
onCreate–onStart—onResume
onRestart–onStart—onResume
暂停状态:可见,但是不可操作
onPause
停止状态:不可见,并且也不可操作
onStop
销毁状态:该Activity结束,或Activity所在的Dalivik进程被结束
onDestory
onCreate():Activity在实例化过程被调用,进行创建工作,只会调用一次,一般创建界面,做一些数据的初始化工作。
onStart():Activity启动过程的回调函数。
onResume():恢复Activity时被回调,onStart()方法后一定会回调该方法,可操作。
onPause():暂停Activity时被回调(Activity失去操作焦点,但可见),系统会停止动画等消耗CPU的事情。应该在这里保存你的一些数据,因为这个时候你的程序的优先级降低,有可能被系统收回。在这里保存的数据,应该在onResume里读出来。
onStop():停止Activity时被回调(Activity失去操作焦点,不可见)。
onDestory():销毁Activity时被回调,该方法只会被调用一次(回收资源)这是Activity被kill前最后一个被调用方法了。
onRestart():这个方法在活动由停止状态变为运行状态之前调用,也就是活动被重新启动了。

Activity生命周期的三种状态:
1)Activity完整的生命周期:指从调用onCreate()创建Activity到最终调用onDestroy()销毁Activity的过程
onCreate()–>onStart()—>onResume()–>onPause()–>onStop()–>onDestory()
2)可见Activity的生命周期:指从调用onStart()/onRestart()开始到调用onStop()结束的过程
onStart()/onRestart()–>onResume()–>onPause–>onStop()
3)活跃Activity的生命周期:指从调用onResume()到调用onPause()暂停的过程
onResume()–>onPause()

Activity生命周期的几个过程,下面细说几个过程:
1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态。
2.当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行。
3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态。
4.当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入暂停状态。
5.用户后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。
6.当前Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前Activity,而后用户退回当前Activity,再次调用onCreate方法、onStart方法、onResume方法,进入运行状态。
7.用户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity。

package com.xspacing.activity;

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

/**
 * 
 * @ClassName MainActivity.java
 * @Description TODO activity生命周期
 * @author smile
 * @version v1.0
 * @date 2016年9月28日
 */
public class MainActivity extends Activity {

    private static final String TAG = "MainActivity";

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

    // 保存activity信息,activity在横竖屏幕的时候生命周期会重新刷新
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        Log.i(TAG, "onSaveInstanceState()");
        outState.putString("data", "保存的数据");
        super.onSaveInstanceState(outState);
    }

    // 取activity保存的信息,只有在生命周期重新刷新的时候才执行
    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        if (savedInstanceState != null) {
            String data = savedInstanceState.getString("data");
            Log.i(TAG, "data:" + data);
        }
        super.onRestoreInstanceState(savedInstanceState);
    }

    // activity在stop()生命周期启动activity执行
    @Override
    protected void onRestart() {
        Log.i(TAG, "onRestart()");
        super.onRestart();
    }

    // 界面可见的时候执行
    @Override
    protected void onStart() {
        super.onStart();
        Log.i(TAG, "onStart()");
    }

    // 界面可点触,即界面获取焦点,可与用户互动的时候执行
    @Override
    protected void onResume() {
        super.onResume();
        Log.i(TAG, "onResume()");
    }

    // 界面可见,但失去焦点,不可与用户互动的时候执行
    @Override
    protected void onPause() {
        super.onPause();
        Log.i(TAG, "onPause()");
    }

    // 界面不可见,用户按home键,即activity还在activity栈中的时候执行
    @Override
    protected void onStop() {
        super.onStop();
        Log.i(TAG, "onStop()");
    }

    // 用户按back键,即activity退出activity栈的时候执行
    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i(TAG, "onDestroy()");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值