《Android编程权威指南》第三章个人学习笔记

3.1 日志跟踪理解Activity生命周期


3.1.1 输出日志信息

Android内部的android.util.log类能够发送日志信息到系统级别的共享日志中心。Log类有好几个日志信息记录方法。本书使用最多的是:

     public static int d(String tag, String msg)

d代表着“debug”,表示日志信息的级别。(最后一节有详解)第一个参数表示日志信息的来源,第二个参数表示日志的具体内容。


该方法的第一个参数通常以类名为值得TAG常量传入。 

清单3-1 新增一个TAG常量(QuizActivity.java):
private static final String TAG = "QuizActivity";  //新增TAG常量


 

 


清单3-2 为onCreate(...)方法添加日志输出代码(QuizActivity.java):
        Log.d(TAG, "onCreat(Button) called");  //onCreate()方法日志输出


 

若Eclipse提示无法识别Log类的错误,则Windows系统使用Ctrl+Shift+O(Mac系统的:Command+Shift+O)进行类包组织导入,选择android.util.Log类。


 

接下来,继续覆盖其他五个生命周期方法:

清单3-3 覆盖更多生命周期方法(QuizActivity.java):
    }  //End of onCreate(Bundle)
 
     //继续覆盖五个生命周期
    @Override  //使用此注解,即要求编译器保证当前类具有准备覆盖的方法            
    public void onStart() {
    	super.onStart();
    	Log.d(TAG, "onStart() called");    
    }
    
    @Override
    public void onPause() {
    	super.onPause();
    	Log.d(TAG, "onPause() called");
    }
 
    @Override
    public void onResume() {
    	super.onResume();
    	Log.d(TAG, "onResume() called");
    }
 
    @Override
    public void onStop() {
    	super.onStop();
    	Log.d(TAG, "onStop() called");
    }
 
    @Override
    public void onDestroy() {
    	super.onDestroy();
    	Log.d(TAG, "onDestroy() called");
    }

 

 

 

3.1.2 使用LogCat

应用运行时,可以使用LogCat工具来查看日志。

打开LogCat,选择window—show view—other... 


为方便日志信息的查找,可使用TAG常量过滤日志输出:

 

 

可通过LogCat里的QuizActivity看日志信息。


 

3.2设备旋转与Activity生命周期 

设置配置与备选资源

旋转设备会改变设备配置。设备配置是用来描述设备当前状态的一系列特征,这些特征包括:屏幕的方向、屏幕的密度、屏幕的尺寸、键盘类型、底座模式以及语言,等等。

 

创建水平模式布局

在res目录下创建一个新文件夹layout-land,并将activity_quiz.xml复制到其下。这样,就有了一个水平模式布局以及一个默认布局(竖直模式)。注意,两个布局文件必须具有相同的文件名,这样,它们才能以同一个资源ID被引用。

 

为与默认的布局文件相区别,需要对水平模式布局文件做出一些修改。

清单3-4  水平模式布局修改(layout-land/activity_quiz.xml):



备注:android:layout_gravity="center_horizontal" (中心—水平)

       center,中心,top顶部,bottom,底部;

       horizontal,水平,vertical,垂直


运行程序,旋转屏幕至水平方位,查看新的布局界面。这不仅仅是一个新的布局界面,也是一个新的QuizActivity

 

效果:横竖屏在翻转时,总是会回到第一页:

此时在第二页,  




翻转后回到第一页。



3.3 设备旋转前保存数据

为解决设备旋转导致的activity销毁与新建带来的麻烦。

要修正这个缺陷,旋转后新创建的QuizActivity需要知道mCurrentIndex变量的原有值。因此,在设备运行中发生配置变更时,如设备旋转,需采用某种方式保存以前的数据。


一种实现方式:

   protected void onSaveInstanceState(Bundle outState)

 

覆盖onSaveInstanceState(Bundle)方法


通过覆盖onSaveInstanceState(...)方法,将一些数据保存在Bundle中,然后在onCreate(...)方法中取回这些数据。设备旋转时,将采用这种方式保存mCurrentIndex变量值。


清单3-5  新增键-值对的键(QuizActivity.java):
	private static final String KEY_INDEX = "index";



清单3-6  覆盖onSaveInstanceState(...)方法(QuizActivity.java):
    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
    	super.onSaveInstanceState(savedInstanceState);
    	Log.i(TAG, "onSaveInstanceState");
    	savedInstanceState.putInt(KEY_INDEX, mCurrentIndex);
}



 

 

清单3-7  在onCreate(...)方法中检查存储的bundle信息(QuizActivity.java):
        if (savedInstanceState != null) {
        	mCurrentIndex = savedInstanceState.getInt(KEY_INDEX, 0);
        }

 

 

 

 

效果:

 

                                               竖屏第二页,                                                    

   

                                       翻转为横屏,还在第二页,数据保存了。

 

 

 

3.4 再探Activity生命周期

增加一个暂存状态(stashed state)到activity生命周期:


 



3.5 深入学习:测试onSaveInstanceState(Bundle)方法


(我现在用的是手机测试,所以不需书上的设置)

运行应用,单击主屏幕键,会暂停并停止当前activity,但再打开应用,数据还是保存的。但是,单击后退键,就相当于通知系统“用户不再需要使用当前的activity”,重新打开应用,之前数据已被清除,又重新回到第一页了。

 

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

 

使用android.util.Log类记录日志信息,不仅可以控制日志信息内容,还可以控制用来划分信息重要程度的日志级别。

        Log Level      

    Method 

      说明

        ERROR

    Log.e(...)      

      错误

        WARNING

    Log.w(...)

      警告

        INFO

    Log.i(...)

      信息型消息 

        DEBUG

    Log.d(...)

      调试输出:可能被过滤掉      

        VERBOSE

    Log.v(...)

      只用于开发


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

 

两种方法不同参数签名的使用实例:

清单3-8:Android的各种日志记录方式
//Log a message at "debug" log level
Log.d(TAG, "Current question index: " + mCurrentIndex);
 
TrueFalse question;
try {
question= mQuestionBank[mCurrentIndex];
} catch (ArrayIndexOutOfBoundsException ex) {
// Log a message at "error" log level, along with an exception stack trace
Log.e(TAG, "Index was out of bounds",ex);
}


 

整体代码链接:《Android编程权威指南》第三章程序 

 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android开发权威指南》内容上涵盖了用最新的Android本开发的大部分场景 全书分4个部分 分别从Android基础介绍 环境搭建 SDK介绍 到应用剖析 组件介绍 综合实例演示 以及符合潮流的 最新的移动开发技术 如HTML5 OpenGL ES NDK编程 Android测试驱动开发等几个方面讲述 从技术实现上 讲解了6大完整综合案例及源代码分析 分别是新浪微博客户端 蓝牙聊天 全键盘输入法 月球登陆(游戏) 贪吃蛇(游戏) 笑脸连连看(游戏)   《Android开发权威指南》注重对实际动手能力的指导 在遵循技术研发知识体系严密性的同时 在容易产生错误 不易理解的环节上配备了翔实的开发情景截图;并将重要的知识点和开发技巧以“多学一招” “扩展学习” “技巧点拨”等的活泼形式呈现给读者 在程序实例的讲解方面 主要将实例安插在Android开发的精髓知识章节 这为读者学习与实践结合提供了很好的指导   《Android开发权威指南》配套光盘包含开发视频及全部源程序 指导读者快速 无障碍地学通Android实战开发技术   《Android开发权威指南》适合具备一定软件开发经验 想快速进入Android开发领域的程序员 具备一些手机开发经验的开发者和Android开发爱好者学习使用;也适合作为相关培训学校的Android培训教材 目录: 第一部分 准备篇 第1章 初识庐山真面目 Android开发简介 第2章 工欲善其事 必先利其器 搭建和使用Android开发环境 第二部分 基础篇 第3章 千里之行始于足下 Android程序设计基础 第4章 我的UI我做主 用户界面开发基础 第5章 良好的学习开端 控件 Widget 详解 第6章 友好的菜单 Menu介绍与实例 第7章 友好地互动交流 信息提醒 对话框 Toast与Notification 第8章 移动的信息仓库 数据存储 第9章 Android中的窗口 Activity 第10章 全局事件 广播 Broadcast 第11章 跨应用数据源 Content Provider 第12章 一切为用户服务 Service基础与实例 第13章 做好应用桥梁 网络与通信 第14章 炫酷你的应用 多媒体开发 第15章 D游戏开发 第16章 有趣的Android应用 第三部分 高级篇 第17章 HTML5与移动Web开发 第18章 输入法开发 第19章 Android OpenGL ES开发基础 第20章 OpenGL ES的超酷效果 第21章 Android NDK编程 第22章 测试驱动开发 TDD 第四部分 综合实例篇 第23章 Android综合案例一 蓝牙聊天 第24章 Android综合案例二 月球登陆 游戏 第25章 Android综合案例三 全键盘输入法 应用 第26章 Android综合案例四 贪吃蛇 游戏 第27章 Android综合案例五 新浪微博客户端 应用 第28章 Android综合案例六 笑脸连连看 游戏 ">《Android开发权威指南》内容上涵盖了用最新的Android本开发的大部分场景 全书分4个部分 分别从Android基础介绍 环境搭建 SDK介绍 到应用剖析 组件介绍 综合实例演示 以及符合潮流的 最新的移动开发技术 如HTML5

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值