Android开发系列1——Activity详解

  Activity类是Android应用开发的一个关键组件(相当于IOS中的UIViewController类),简单的明了的说就是一个页面。

一、Activity生命周期

  首先,一个Activity在其生命周期中需要经历几个状态,每个状态是什么含义,每个状态都做了那些,每个状态需要做什么等。只有了解Activity生命周期,才能更好地开发Android程序。

  Android开发者平台官方提供一张Activity生命周期,如下图:
Activity生命周期
从图上,可以知道Activity的大概的工作流程。接下来会详细的讲解每个方法,以及详细含义和作用。

二、Activity的阶段

1.onCreate()

  在首次创建Activity时触发,Activity会在创建后进入已创建状态,在Activity的整个生命周期只会触发一次。在onCreate()方法中,执行执行应用启动逻辑,例如数据绑定,UI界面的绑定创建等。

  Activity由于内存、外部愿意等页面出现crash,通过savedInstanceState方法对Activity方法把数据保存到Bundle中,重新打开这个页面,onCreate() 会接收savedInstanceState保存的参数,同时会调onRestoreInstanceState方法读取保存在Bundle的参数。下边是一个简单的例子

TextView textView;

// some transient state for the activity instance
String gameState;

@Override
public void onCreate(Bundle savedInstanceState) {
    // call the super class onCreate to complete the creation of activity like
    // the view hierarchy
    super.onCreate(savedInstanceState);

    // recovering the instance state
    if (savedInstanceState != null) {
        gameState = savedInstanceState.getString(GAME_STATE_KEY);
    }

    // set the user interface layout for this activity
    // the layout file is defined in the project res/layout/main_activity.xml file
    setContentView(R.layout.main_activity);

    // initialize member TextView so we can manipulate it later
    textView = (TextView) findViewById(R.id.text_view);
}

// This callback is called only when there is a saved instance that is previously saved by using
// onSaveInstanceState(). We restore some state in onCreate(), while we can optionally restore
// other state here, possibly usable after onStart() has completed.
// The savedInstanceState Bundle is same as the one used in onCreate().
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
    textView.setText(savedInstanceState.getString(TEXT_VIEW_KEY));
}

// invoked when the activity may be temporarily destroyed, save the instance state here
@Override
public void onSaveInstanceState(Bundle outState) {
    outState.putString(GAME_STATE_KEY, gameState);
    outState.putString(TEXT_VIEW_KEY, textView.getText());

    // call superclass to save any view hierarchy
    super.onSaveInstanceState(outState);
}
2.onStart()

已开始状态(不可见)
Activity进入“已开始”状态,系统会调用此回调。onStart()调用使Activity对用户可见,因此应用通过此方法来初始化维护界面的代码。(此回调方法:不可见)

3.onResume()

已恢复状态(可见)
Activity进入”已恢复“状态时来到前台,系统会调用此回调。此时,Activity 处于 Activity 堆栈的顶层,并具有用户输入焦点。时刻监听用户手势动作,并作出不同的响应动作。

  1)当前ActivityA跳转另一个ActivityB,会调用onPause停止当前ActivityA上的所有动画,保存内容等进入后台。启用另外一个ActivityB: onCreate()->onStart()->onResume(),继续调用ActivityA的onStop()进入后台。
  2)当前ActivityA上有某些事件发生弹框,使焦点远离ActivityA的交焦点进入下一个状态onPause。

4.onPause()

已暂停状态(可见)
正在暂停Activity上焦点、动画、以及数据修改和消耗CPU的内容等,当前回调方法执行完成才能进入到下一个Activity或者是某些事件。它应该非常迅速地执行所需操作,因为它返回后,下一个 Activity 才能继续执行,所以不能执行耗时操作。而后正常情况下会调用onStop方法。但是有一种极端情况,就是如果这个时候快速让 当前Activity 返回前台,则会调用onResume方法。

5.onStop()

已停止状态(不可见)
在Activity进入后台不可见时调用。
  1)另外一个Activity B覆盖当前Activity A时调用。
  2)当前Activity被销毁
  3)当Activity进入后台(点击Home,进入后台)

6.onRestart()

正在重新开始状态(不可见)
在Activity被停止后再次启动时调用,onRestart()方法调用后,会调用onStart->onResume
  1)屏幕熄灭后再次回到app,按下home键后再次回到app
  2)返回当前ActivityA重新调用onStart方法

7.onDestroy()

正在销毁状态(不可见)
在 Activity 被销毁前调用,这是 Activity 收到的最后调用。
  1)当 Activity 结束(对 Activity 调用了 finish 方法)
  2)系统为节省空间而暂时销毁该 Activity 实例时,可能会调用它。
你可以通过 isFinishing 方法区分这两种情形。

三、总结

Activity是一个完整的循环的理解,需要真机的测试一下,配合打印出来每个阶段的内容,可以非常快的理解每个阶段的。

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

//
    @Override
    protected void onStart() {
        super.onStart();
        System.out.println("-----------Main-------onStart-------------------");
    }


    @Override
    protected void onResume() {
        super.onResume();
        System.out.println("-----------Main-------onResume-------------------");
    }

    @Override
    protected void onPause() {
        super.onPause();
        System.out.println("-----------Main-------onPause-------------------");
    }
    @Override
    protected void onStop() {
        super.onStop();
        System.out.println("-----------Main-------onStop-------------------");
    }
    @Override
    protected void onRestart() {
        super.onRestart();
        System.out.println("-----------Main-------onRestart-------------------");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();

        System.out.println("-----------Main-------onDestroy-------------------");
    }

继续更新中……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值