通常,activity通过覆盖onCreate(...)方法来准备以下用户界面的相关工作:
-
实例化组件并将组件放置在屏幕上(调用方法setContentView(int));
-
引用已实例化的组件;
-
为组件设置监听器以处理用户交互;
-
访问外部模型数据。
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);
}