第3章 Activity的生命周期

通常,activity通过覆盖onCreate(...)方法来准备以下用户界面的相关工作:

  1. 实例化组件并将组件放置在屏幕上(调用方法setContentView(int));

  2. 引用已实例化的组件;

  3. 为组件设置监听器以处理用户交互;

  4. 访问外部模型数据。

3.1.1 输出日志信息

该方法的第一个参数通常以类名为值的TAG常量传入。这样,很容易看出日志信息的来源。


private static final Sting TAG = "MainActivity";

Log.d(TAG, "onCreate called");

在覆盖Activity的生命周期方法中需要调用父类相应的生命周期方法,这是必不可少的。而在其他方法中,是否首先调用超类方法就不那么重要了。

3.2 创建水平模式布局

需要在res目录下新建一个文件夹叫做layout-land。layout-land和layout中的布局文件名应相同,这样才能被同一个资源ID引用。

3.4 再探 Activity 生命周期

为便于理解activity记录,我们增加一个暂存状态(stashed state)到activity生命周期,

activity暂存后,Activity对象不再存在,但操作系统会将activity记录对象保存起来。这样, 在需要恢复activity时,操作系统可以使用暂存的activity记录重新激活activity。

注意,activity进入暂存状态并不一定需要调用onDestroy()方法。不过,onPause()和onSaveInstanceState(...)通常是我们需要调用的两个方法。常见的做法是,覆盖onSaveInstanceState(...)方法,将数据暂存到Bundle对象中,覆盖onPause()方法处理其他需要处理的事情。

有时,Android不仅会销毁activity,还会彻底停止当前应用的进程。不过,只有在用户离开 当前应用时才会发生这种情况。即使这种情况真的发生了,暂存的activity记录依然被系统保留着, 以便于用户返回应用时activity的快速恢复。

那么暂存的activity记录到底可以保留多久?前面说过,用户按了后退键后,系统会彻底销毁当前的activity。此时,暂存的activity记录同时被清除。此外,系统重启或长时间不使用activity 时,暂存的activity记录通常也会被清除。

3.6 深入学习:日志记录的级别与方法

所有的日志记录方法都有两种参数签名:string类型的tag参数和msg参数;出tag和msg参数外再加上Throwable实例参数。附加的Throwable实例参数为应用抛出异常时记录异常信息提供了方便。


try{

    //...

}catch(Exception e){

    Log.d(TAG, "index was out of bounds.", e);

}

posted @ 2017-07-09 21:19  qiaoer2  阅读(167)  评论(0编辑  收藏  举报