




已阅读5页,还剩87页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
书名 Android项目驱动式开发教程ISBN 978 7 111 46216 3作者 刘正出版社 机械工业出版社本书配有电子课件 第2章Android生命周期及调试方法 1 项目任务 通过学习Android系统进程以及Activity的生命周期概念 多界面的跳转方法等知识 学习并理解Android中各生命周期函数的方法以及各种项目调试的使用方法 2 项目要求 1 掌握Activity生命周期中的主要函数方法 2 理解Intent的概念及应用方法 3 了解和掌握界面跳转的两种方法 4 掌握Android程序开发的调试方法 2 1系统进程生命周期 Android系统主动的管理系统资源 为了保证高优先级程序 进程 的正常运行 可以在某些情况下终止低优先级的程序 进程 并回收其使用的系统资源 因此 Android程序并不能完全控制自身的生命周期 而是由Android系统进行调度和控制的 2 1系统进程生命周期 各种进程按照重要性从高到低排列前台进程可见进程服务进程后台进程空进程 2 1系统进程生命周期 前台进程这样的进程拥有一个在屏幕上显示并和用户交互的Activity或者它的一个IntentReceiver正在运行 这样的程序重要性最高 只有在系统内存非常低 万不得已时才会被结束 2 1系统进程生命周期 可见进程在屏幕上显示 但是不在前台的程序 比如一个前台进程以对话框的形式显示在该进程前面 这样的进程也很重要 它们只有在系统没有足够内存运行所有前台进程时 才会被结束 2 1系统进程生命周期 服务进程这样的进程在后台持续运行 比如后台音乐播放 后台数据上传下载等 这样的进程对用户来说一般很有用 所以只有当系统没有足够内存来维持所有的前台和可见进程时 才会被结束 2 1系统进程生命周期 后台进程包含目前不为用户所见的Activity Activity对象的onStop 方法已被调用 的进程 这些进程与用户体验没有直接的联系 可以在任意时间被杀死以回收内存供前台进程 可视进程以及服务进程使用 一般来说 会有很多后台进程运行 所以它们一般存放于一个LRU 最后使用 列表中以确保最后被用户使用的Activity最后被杀死 如果一个Activity正确的实现了生命周期方法 并捕获了正确的状态 则杀死它的进程对用户体验不会有任何不良影响 2 1系统进程生命周期 空进程这样的进程不包含任何活动的程序部件 这种进程存在的唯一原因是做为缓存以改善组件再次被启动时 可缩短运行时的启动时间 系统可能随时关闭这类进程 2 2Activity生命周期 2 2 1Activity生命周期基本概念Activity生命周期指Activity从启动到销毁的过程 Activity表现为四种状态活动状态暂停状态停止状态非活动状态 2 2Activity生命周期 2 2 1Activity生命周期基本概念1 活动状态 Activity在用户界面中处于最上层 完全能让用户看到 能够与用户进行交互 暂停状态 Activity在界面上被部分遮挡 该Activity不再处于用户界面的最上层 且不能够与用户进行交互 停止状态 Activity在界面上完全不能被用户看到 也就是说这个Activity被其他Activity全部遮挡 非活动状态 不在以上三种状态中的Activity则处于非活动状态 2 1系统进程生命周期 2 2 2生命周期的回调函数本部分的一个重点就是要理解回调函数在Android系统中的概念和区别点 回调函数不是由程序员主动在程序中指定函数名来调用 而是由系统根据某些特定条件的触发 由Android系统决定调用对应的回调函数 实行对应的功能 2 2Activity生命周期 2 2 2生命周期的回调函数生命周期图 2 2Activity生命周期 2 2 2生命周期的回调函数生命周期图中 其中三个状态是静态的 Resumed状态 在这个状态 activity是在最前端的 用户可以与它进行交互 通常也被理解为 running 状态 Paused状态 在这个状态 activity被另外一个activity所遮盖 另外的activity来到最前面 但是半透明的 不会覆盖整个屏幕 被暂停的activity不会再接受用户的输入且不会执行任何代码 Stopped状态 在这个状态 activity完全被隐藏 不被用户可见 可以认为是在后台 当stopped activity实例与它的所有状态信息都会被保留 但是activity不能执行任何代码 2 2Activity生命周期 2 2 2生命周期的回调函数其它状态 CreatedandStarted 都是短暂的 系统快速的执行那些回调函数并通过执行下一阶段的回调函数移动到下一个状态 也就是说 在系统调用onCreate 之后会迅速调用onStart 之后再迅速执行onResume 2 2Activity生命周期 2 2 2生命周期的回调函数mainactivity必须在Manifest使用包括MAINactionandLAUNCHERcategory的标签来声明 如 1 2 3 4 5 6 2 2Activity生命周期 2 2 2生命周期的回调函数Activity生命周期的事件回调函数 2 2Activity生命周期 2 2 2生命周期的回调函数Activity状态保存 恢复的事件回调函数 2 2Activity生命周期 2 2 2生命周期的回调函数并不是所有的事件中所有的生命周期都会被调用 如果被调用 则会遵循下图的调用顺序 2 2Activity生命周期 2 2 2生命周期的回调函数Activity生命周期是指Activity从启动到销毁的过程全生命周期可视生命周期活动生命周期 2 2Activity生命周期 2 2 2生命周期的回调函数全生命周期从Activity建立到销毁的全部过程 始于onCreate 结束于onDestroy 使用者通常在onCreate 中初始化Activity所能使用的全局资源和状态 并在onDestroy 中释放这些资源 在一些极端的情况下 Android系统会不调用onDestroy 函数 而直接终止进程 2 2Activity生命周期 2 2 2生命周期的回调函数可视生命周期Activity在界面上从可见到不可见的过程 开始于onStart 结束于onStop onStart 一般用来初始化或启动与更新界面相关的资源 onStop 一般用来暂停或停止一切与更新用户界面相关的线程 计时器和服务 onRestart 函数在onStart 前被调用 用来在Activity从不可见变为可见的过程中 进行一些特定的处理过程 onStart 和onStop 会被多次调用 而且onStart 和onStop 也经常被用来注册和注销BroadcastReceiver 2 2Activity生命周期 2 2 2生命周期的回调函数活动生命周期Activity在屏幕的最上层 并能够与用户交互的阶段 开始于onResume 结束于onPause 在Activity的状态变换过程中onResume 和onPause 经常被调用 因此这两个函数中应使用更为简单 高效的代码 onPause 是第一个被标识为 可终止 的函数 在onPause 返回后 onStop 和onDestroy 随时能被Android系统终止 onPause 常用来保存持久数据 如界面上用户的输入信息等 2 2Activity生命周期 2 2 2生命周期的回调函数activitylifecycledemo java文件的代码1 packagecn edu siso activitylifecycledemo 2 importandroid os Bundle 3 importandroid app Activity 4 importandroid util Log 5 publicclassMainActivityextendsActivity 6 privatestaticfinalStringTAG LIFECYCLEDEMO 7 Override 完全生命周期开始时被调用 初始化Activity8 publicvoidonCreate BundlesavedInstanceState 9 super onCreate savedInstanceState 10 setContentView R layout activity main 11 Log e TAG 调用了onCreate 方法 12 13 Override 可视生命周期开始时被调用 对用户界面进行必要的更改14protectedvoidonStart 15super onStart 2 2Activity生命周期 2 2 2生命周期的回调函数activitylifecycledemo java文件的代码16 Log e TAG 调用了onStart 方法 17 18 Override 在重新进入可视生命周期前被调用 载入界面所需要的更改信息19 protectedvoidonRestart 20 super onRestart 21 Log e TAG 调用了onRestart 方法 22 23 Override 在活动生命周期开始时被调用 恢复被onPause 停止的用于界面更新的资源24 protectedvoidonResume 25 super onResume 26 Log e TAG 调用了onResume 方法 27 28 Override 在活动生命周期结束时被调用 用来保存持久的数据或释放占用的资源29 protectedvoidonPause 30 super onPause 2 2Activity生命周期 2 2 2生命周期的回调函数activitylifecycledemo java文件的代码31 Log e TAG 调用了onPause 方法 32 33 Override 在可视生命周期结束时被调用 一般用来保存持久的数据或释放占用的资源34 protectedvoidonStop 35 super onStop 36 Log e TAG 调用了onStop 方法 37 38 Override 在完全生命周期结束时被调用 释放资源 包括线程 数据连接等39 protectedvoidonDestroy 40 super onDestroy 41 Log e TAG 调用了onDestroy 42 2 2Activity生命周期 2 2 2生命周期的回调函数观察完全生命周期的回调函数的执行程序打开应用时先后执行了onCreate onStart onResume三个方法Activity打开应用时执行的回调函数顺序 2 2Activity生命周期 2 2 2生命周期的回调函数先后调用onPause onStop onDestory 三个方法按下Back键时执行的回调函数顺序 2 2Activity生命周期 2 2 2生命周期的回调函数可视生命周期的回调函数的执行程序当我们按HOME键的时候 Activity先后执行了onPause onStop 这两个方法启动程序后按下Home键时执行的回调函数顺序 2 2Activity生命周期 2 2 2生命周期的回调函数当我们再次启动本应用程序时 则先后分别执行了onRestart onStart onResume 三个方法再启动Activity时执行的回调函数顺序 2 3Intent的概念及使用 Android中 Activity是所有程序的根本 所有程序的流程都运行在Activity之中 Activity具有自己的生命周期 由系统控制生命周期 程序无法改变 掌握Activity的关键最主要的一点就是对生命周期的把握 其次就是Activity之间通过Intent的跳转和数据传输 2 3Intent的概念及使用 Android中提供了一种Intent机制来协助应用程序间 组件之间的交互与通讯 Intent负责对应用中一次操作的动作 动作涉及数据 附加数据进行描述 Android则根据此Intent的描述 负责找到对应的组件 将Intent传递给调用的组件 并完成组件的调用 Intent不仅可用于应用程序之间 也可用于应用程序内部的组件如Activity Service之间的交互 Android中的四种组件是独立的 它们之间可以互相调用 协调工作 最终组成一个真正的Android应用 在这些组件之间的通讯中 主要就是由Intent协助完成的 2 3Intent的概念及使用 Intent的中文意思就是意图 目的 与此概念相吻合 Intent在Android中起着一个媒体中介的作用 指出希望跳转到的目的组件的相关信息 并实现调用者与被调用者之间的信息数据传递 在SDK中给出了Intent作用的表现形式为 1 通过startActivity orstartActivityForResult 启动一个Activity 2 通过startService 启动一个服务Service 或者通过bindService 和后台服务进行交互 3 通过广播方法sendBroadcast sendOrderedBroadcast 或sendStickyBroadcast 方法在Android系统中发布广播消息 2 3Intent的概念及使用 理解Intent的关键之一是理解清楚Intent的两种基本用法 一种是显式的Intent 即在构造Intent对象时就指定接收者 另一种是隐式的Intent 即Intent的发送者在构造Intent对象时 并不知道也不关心接收者是谁 有利于降低发送者和接收者之间的耦合 对于显式Intent Android不需要去做解析 因为目标组件已经很明确 Android需要解析的是那些隐式Intent 通过解析 将Intent映射给可以处理此Intent的组件 如Activity BroadReceiver或Service 2 3Intent的概念及使用 对于隐式Intent Android是怎样寻找到这个最合适的组件呢 Intent解析机制主要是通过查找已注册在AndroidManifest xml中的所有IntentFilter 意图过滤器 及其中定义的Intent IntentFilter其实就是用来匹配隐式Intent的 当一个意图对象被一个意图过滤器进行匹配测试时 只有三个方面会被参考到 动作 数据 URI以及数据类型 和类别 2 3Intent的概念及使用 1 动作 Action 一个意图对象只能指定一个动作名称 常见动作如下表所示 而一个过滤器可能列举多个动作名称 2 3Intent的概念及使用 如果意图对象或过滤器没有指定任何动作 结果将如下 一方面 如果过滤器没有指定任何动作 那么将阻塞所有的意图 因此所有的意图都会测试失败 没有意图能够通过这个过滤器 这种情况就不适用隐式跳转 另一方面 只要过滤器包含至少一个动作 一个没有指定动作的意图对象也能自动通过这个测试 2 3Intent的概念及使用 通过3个Intent用法示例来说明 详见下表 2 3Intent的概念及使用 2 类别 Category 对于一个能够通过类别匹配测试的意图 意图对象中的类别必须匹配过滤器中的类别 这个过滤器可以列举另外的类别 但它不能遗漏在这个意图中的任何类别 原则上一个没有类别的意图对象应该总能够通过匹配测试 而不管过滤器里有什么 大部分情况下这个是对的 但有一个例外 Android把所有传给startActivity 的隐式意图当作他们包含至少一个类别 android intent category DEFAULT CATEGORY DEFAULT常量 因此 想要接收隐式意图的活动必须在它们的意图过滤器中包含 android intent category DEFAULT 带 android intent action MAIN 和 android intent category LAUNCHER 设置的过滤器是例外 2 3Intent的概念及使用 3 数据 Data 当一个意图对象中的URI被用来和一个过滤器中的URI比较时 比较的是URI的各个组成部分 例如 如果过滤器仅指定了一个scheme 所有该scheme的URIs都能够和这个过滤器相匹配 如果过滤器指定了一个scheme 主机名但没有路经部分 所有具有相同scheme和主机名的URIs都可以和这个过滤器相匹配 而不管它们的路经 如果过滤器指定了一个scheme 主机名和路经 只有具有相同scheme 主机名和路经的URIs才可以和这个过滤器相匹配 当然 一个过滤器中的路径规格可以包含通配符 这样只需要部分匹配即可 2 4Activity的启动和跳转 在Android系统中 应用程序一般都有多个Activity 前一节介绍的Intent可以帮助实现不同Activity之间的切换和数据传递 Activity的跳转启动的方式主要有两种 分为显示启动和隐式启动 显式启动 必须在Intent中指明启动的Activity所在的类 隐式启动 Android系统根据Intent的动作和数据来决定启动哪一个Activity 也就是说在隐式启动时 Intent中只包含需要执行的动作和所包含的数据 而无需指明具体启动哪一个Activity 选择权由Android系统和最终用户来决定 2 4Activity的启动和跳转 2 4 1两种启动和跳转方式使用Intent来显示启动Activity 首先要创建一个Intent对象 并为它指定当前的应用程序上下文以及要启动的Activity这两个参数 然后把这个Intent对象作为参数传递给startActivity这个方法 1 Intentintent newIntent IntentDemo this ActivityToStart class 2 startActivity intent 2 4Activity的启动和跳转 2 4 1两种启动和跳转方式使用Intent来隐式启动Activity 首先也要创建一个Intent对象 不需要指明需要启动哪一个Activity 匹配的Activity可以是应用程序本身的 也可以是Android系统内置的 还可以是第三方应用程序提供的 而由Android系统来决定 这样有利于使用第三方组件 然后把这个Intent对象作为参数传递给startActivity这个方法 2 4Activity的启动和跳转 2 4 1两种启动和跳转方式为了便于大家更好的理解 通过例程来进行说明 步骤如下 第一步 新建一个Android工程 这里命名为ActivityStartDemo 1 Uriuri Uri parse 2 Intentintent newIntent Intent ACTION VIEW uri 3 startActivity intent 2 4Activity的启动和跳转 2 4 1两种启动和跳转方式第二步 修改程序代码 使之包含三个Activity 项目默认启动的是MainActivity 这里有3个按钮 分别实现显示跳转到的Activity是SecondActivity 隐式跳转到的是ThirdActivity和网页浏览器 第三步 设置这三个Activity对应的布局文件 MainActivity对应的界面有3个按钮和一个TextView控件 其他显示跳转和隐式跳转的界面布局就只有一个TextView控件用来显示文字 第四步 在AndroidManifest xml文件中注册这三个Activity 并添加网络访问许可 其中隐式跳转启动的Activity对应的Intentfilter要特别注意匹配 2 4Activity的启动和跳转 2 4 1两种启动和跳转方式第五步 在模拟器中启动项目进行跳转实验 a 项目启动主界面 b 点击第一个按钮显示跳转后界面 a 项目启动主界面 2 4Activity的启动和跳转 2 4 1两种启动和跳转方式 c 点击第二个按钮隐式跳转后界面 d 点击第三个按钮后进行网站访问的界面 2 4Activity的启动和跳转 2 4 1两种启动和跳转方式下面我们对重点代码MainActivity java和AndroidMenifest xml文件进行解析 首先看MainActivity的代码片段 这段代码只有4个控件对象以及一个重写的Oncreate 方法 4个控件分别通过findViewById方法和layout中主界面中对应的4个控件一一对应 然后对三个按钮分别设置了监听事件setOnClickListener 监听事件中各自重写了Onclick 方法 利用Intent对象实现不同的跳转功能 2 4Activity的启动和跳转 2 4 1两种启动和跳转方式1publicclassMainActivityextendsActivity 2privateButtonbutton1 3privateButtonbutton2 4privateButtonbutton3 5privateTextViewtv1 67 Override8publicvoidonCreate BundlesavedInstanceState 9super onCreate savedInstanceState 10setContentView R layout activity main 11button1 Button findViewById R id button1 12button2 Button findViewById R id button2 13button3 Button findViewById R id button3 14tv1 TextView findViewById R id maintext 2 4Activity的启动和跳转 2 4 1两种启动和跳转方式16 button1实现显示跳转功能 跳转到Activity217button1 setOnClickListener newOnClickListener 18 Override19publicvoidonClick Viewv 20Intentintent newIntent MainActivity this SecondActivity class 21startActivity intent 22 23 24 button2实现隐式跳转功能 跳转到Activity3 此时 必须在Manifest文件中Intentfilter中进行对应的配置25button2 setOnClickListener newOnClickListener 26 Override27publicvoidonClick Viewv 28Intentintent2 newIntent cn siso hidestart START 29startActivity intent2 2 4Activity的启动和跳转 2 4 1两种启动和跳转方式303134353637383940 2 4Activity的启动和跳转 2 4 1两种启动和跳转方式分析一下AndroidMenifest xml文件 如上面的代码所示 请读者注意其中注释的语句 分别对3个Activity进行了声明 并且对网络访问进行了许可 尤其是对第三个Activity的Intentfilter设置条件第35行一定要与MainActivity java第28行代码一致 才能保证隐式跳转解析成功并跳转 另外实现显示跳转到的Activity是SecondActivity和隐式跳转到的ThirdActivity这两个Activity的代码使用默认代码 使用SetContentView 指定与之关联的XML布局文件即可 2 4Activity的启动和跳转 2 4 2带值跳转方式上节介绍了Activity启动或跳转的两种过程 这两种方式都是没有带值进行跳转 即没有把第一个Activity中的某个值带到第二个Activity中 下面介绍常用的两种带值跳转方法 第一种方法是把在发送Activity中把键值对一个个的put到Intent中 1 Intentintent newIntent 2 intent setClass 第一个Activity this 要跳转的Activity class 3 intent putExtra name lihua 4 startActivity intent 2 4Activity的启动和跳转 2 4 2带值跳转方式第二种写法是采用Bundle对象 先把数据放入到Bundle对象中 然后在批量的加入到Intent中 1 Bundle Bundle newBundle 2 Bundle putInt age 20 3 Bundle putString name lihua 4 itent putExtras intent 2 4Activity的启动和跳转 2 4 2带值跳转方式而在跳转后待接收的Activity中使用以下代码进行值的获取 然后你就可以使用这个变量对象了 这种使用bundle的方法在有些使用场合更方便 其实Bundle的中文原意就是 捆 扎 的意思 可以举个例子 现在要从A界面跳转到B界面或者C界面 这种情形就需要写2个Intent 如果你还要涉及传多个值的话 你的Intent就要写两遍添加多个值的方法 那么 如果用1个Bundle 直接把值先存里边 然后再存到Intent中 1 Bundlebundle data getExtras 获取返回对象2 Stringvalue bundle getString name 获取传递的键值对的值参数 2 4Activity的启动和跳转 2 4 3跳转并带值返回父界面的方式按照Activity启动的先后顺序 先启动的Activity称为父Activity 后启动的称为子Activity 如果需要将子Activity的部分信息返回给父Activity 则可以使用Sub Activity的方式去启动子Activity 2 4Activity的启动和跳转 2 4 3跳转并带值返回父界面的方式获取子Activity的返回值 一般可以分为以下三个步骤 1 以Sub Activity的方式启动子Activity 2 设置子Activity的返回值 3 在父Activity中获取返回值 2 4Activity的启动和跳转 2 4 3跳转并带值返回父界面的方式1 以Sub Activity的方式启动子Activity以Sub Activity的方式启动子Activity时 需要调用startActivityForResult Intent requestCode 方法 注意和前面单程调用的startActivity Intent 方法做区分 参数Intent用于决定启动哪个Activity 参数requestCode是唯一的标识子Activity的请求码 因为一个父Activity可以有多个子Activity 在所有子Activity返回时 父Activity都会调用同一个处理方法 因此父Activity使用requestCode来确定数据究竟是哪一个子Activity返回的 2 4Activity的启动和跳转 2 4 3跳转并带值返回父界面的方式显式启动子Activity的代码如下 注意启动Intent的方法 1 intSUBACTIVITY1 1 2 Intentintent newIntent this SubActivity1 class 3 startActivityForResult intent SUBACTIVITY1 2 4Activity的启动和跳转 2 4 3跳转并带值返回父界面的方式隐式启动子Activity的代码如下 1 intSUBACTIVITY2 2 2 Uriuri Uri parse content contacts people 3 Intentintent newIntent Intent ACTION PICK uri 4 startActivityForResult intent SUBACTIVITY2 2 4Activity的启动和跳转 2 4 3跳转并带值返回父界面的方式2 设置子Activity的返回值在子Activity调用finish 函数关闭前 调用setResult 函数将所需的数据返回给父Activity setResult 函数有两个参数一个是结果码 一个是返回值 结果码表明了子Activity的返回状态是正确返回还是取消选择返回 通常为Activity RESULT OK或者Activity RESULT CANCELED 或自定义的结果码 结果码均为整数类型 2 4Activity的启动和跳转 2 4 3跳转并带值返回父界面的方式返回值用封装在Intent中 子Activity通过Intent将需要返回的数据传递给父Activity 数据主要是Uri形式 可以附加一些额外信息 这些额外信息用Extra的集合表示 下面代码说明如何在子Activity中设置返回值 1 StringuriString editText getText toString 2 Uridata Uri parse uriString 3 Intentresult newIntent null data 4 setResult RESULT OK result 5 finish 2 4Activity的启动和跳转 2 4 3跳转并带值返回父界面的方式3 在父Activity中获取返回值当子Activity关闭时 启动它的父Activity的onActivityResult 函数将被调用 回调函数由系统自动触发 如果需要在父Activity中处理子Activity的返回值 则重写此函数即可 1 publicvoidonActivityResult intrequestCode intresultCode Intent 2 4Activity的启动和跳转 2 4 3跳转并带值返回父界面的方式以下代码说明如何在父Activity中处理子Activity的返回值 1 privatestaticfinalintSUBACTIVITY1 1 2 privatestaticfinalintSUBACTIVITY2 2 3 Override 在父Activity中进行处理函数的重写4 publicvoidonActivityResult intrequestCode intresultCode Intentdata 5 Super onActivityResult requestCode resultCode data 2 4Activity的启动和跳转 2 4 3跳转并带值返回父界面的方式6 switch requestCode 7 caseSUBACTIVITY1 如果是第一个子Activity返回的情况8 if resultCode Activity RESULT OK 9 UriuriData data getData 10 elseif resultCode Activity RESULT CANCEL 11 break 12 caseSUBACTIVITY2 如果是第二个子Activity返回的情况13 if resultCode Activity RESULT OK 14 UriuriData data getData 15 break 16 2 4Activity的启动和跳转 2 4 3跳转并带值返回父界面的方式onActivityResult 函数有3个参数 第1个参数requestCode 用来表示是哪一个子Activity的返回值 在以Sub Activity的方式启动子Activity中说明 第2个参数resultCode用于表示子Activity的返回状态 在设置子Activity的返回值中说明 第3个参数data是子Activity的返回数据 返回数据类型是Intent 根据返回数据的用途不同 Uri数据的协议则不同 也可以使用Extra方法返回一些原始类型的数据 2 4Activity的启动和跳转 2 4 3跳转并带值返回父界面的方式下面对代码做个说明 第1行代码和第2行代码是两个子Activity的请求码 第6行代码对请求码进行匹配 第7行和第10行代码对结果码进行判断 如果返回的结果码是Activity RESULT OK 则在代码的第9行使用getData 函数获取Intent中的Uri数据 如果返回的结果码是Activity RESULT CANCELED 则不进行任何操作 在Android应用开发过程中 多个Activity之间的跳转 带值跳转以及带值返回都是经常使用的技术 务必掌握 2 5Android开发中的调试技术 在开发Android程序前 有必要总结下如何调试Android程序 目前就开发过程中 常用调试程序的方法总结如下并分别作介绍 1 使用Eclipse开发平台进行Debug断点调试 2 使用JUnit调试 3 使用Logcat进行调试 4 使用DDMS进行调试 2 5Android开发中的调试技术 2 5 1使用Debug断点调试Debug断点调试是使用Eclipse必须熟练掌握的调试技术 主要包括 设置断点 运行到断点 单步运行 查看变量值和查看当前堆栈等 写完了项目源文件 修改完语法错误 单击 Debug 按钮 即可开始调试 等待切换到Debug视图后 出现调试工具栏 工具栏上有许多黄色的箭头 可以用它进行调试 按快捷键也可以进行调试与运行 当然调试之前 你一定要将程序加上断点 要不然程序不能停 根本无法调试 增加设置断点的方法很简单 只要在程序中你要调试的一段程序代码最前面双击一下就OK了 2 5Android开发中的调试技术 2 5 2使用Junit调试Android增加了对JUnit的支持 这对程序员来说 是个很好的消息 JUnit是采用测试驱动开发的方式 也就是说在开发前先写好测试代码 主要用来说明被测试的代码会被如何使用 错误处理等 然后开始写代码 并在测试代码中逐步测试这些代码 直到最后在测试代码中完全通过 先有测试规范 然后才有高质量的代码 软件测试的先进思想在将来的企业真实项目开发中 必然会越来越受到重视和推广 2 5Android开发中的调试技术 2 5 3使用Logcat进行调试经常使用的一种方法就是用显示日志Logcat方法 可以方便的观察调试内容 注意Logcat中不能正常的显示中文 在Eclipse中 windows showview other android logcat 可打开Logcat窗口 然后程序导入android util Log包 即可在需要的地方使用Log v aaa 调用了OnCreate 方法 这类语句 执行到相应的语句时 对应的内容将显示在Logcat窗口中 这些信息是每一个程序通过Dalvik虚拟机所传出的实时信息 可以方便我们对程序的了解和判断有没有bug 2 5Android开发中的调试技术 2 5 3使用Logcat进行调试表示的信息的种类分为V D I W E五种 分别表示显示全部信息 Verbose 显示调试信息 Debug 显示一般信息 Information 显示警告信息 Warming 以及显示错误信息 Error 这样的显示顺序 可以通过点击Logcat上面的选项来改变显示的范围 比如选择了W 那就只有警告信息和错误信息可以显示出来了 级别低于选定的信息则会被忽略掉 2 5Android开发中的调试技术 2 5 3使用Logcat进行调试即使用户指定了显示日志的级别 仍旧会产生很多的日志信息 Logcat提供了设置过滤器的功能 方便用户进行必要的信息筛选和判断 具体设置过滤器的窗口如下图所示 用户可以根据日志信息的Tag 标签 产生日志的PID 表示程序运行时的进程号 以及Level 信息等级 对显示的日志内容进行适当的过滤 2 5Android开发中的调试技术 2 5 4使用DDMS进行调试DDMS的全称是DalvikDebugMonitorService 它提供了为测试设备截屏 针对特定的进程查看正在运行的线程以及堆信息 查看Logcat信息 广播状态信息 模拟电话呼叫 接收SMS 虚拟地理坐标等功能 DDMS和Debug以及Java编辑界面可以通过Eclipse的右上角的菜单进行切换 DDMS的界面如下图所示 2 5Android开发中的调试技术 2 5 4使用DDMS进行调试 2 5Android开发中的调试技术 2 5 4使用DDMS进行调试DDMS为IDE和模拟器及真正的android设备之间架起来了一座桥梁 开发人员可以通过DDMS看到目标机器上运行的进程及各种实时状态 可以看进程的heap信息 可以查看logcat信息 可以查看进程分配内存情况 可以像目标机发送短信以及打电话 可以像android开发发送地理位置信息 2 5Android开发中的调试技术 2 5 4使用DDMS进行调试DDMS提供模拟器 或真实设备 的截屏功能 对于完成设计报告 测试报告或写论文等非常有帮助 可以直接拷贝到Word文档中 在Device窗口中有个照相机的按钮就可以弹出相应窗口 另外DDMS中的FileExplorer中可以访问到SDcard并进行交互 可以往模拟器的SD卡中推送文件 如MP3歌曲 图片等文件 这个功能在多媒体开发中经常使用 2 6实训项目与演练 知识要点 掌握生命周期的概念 尤其是回调函数的作用与功能 Activity的启动与跳转 能力训练 通过实验实训 掌握各种常用的调试 会根据项目要求进行生命周期相关 Activity带值跳转等的代码编写能力及调试差错能力 任务内容 通过使用Logcat跟踪Activity带值跳转的方法来熟悉和掌握Logcat的调试方法以及带值跳转的程序编写方法 通过使用Debug调试观察Activity跳转并带值返回来熟悉和掌握断点调试的方法 2 6 1使用Logcat跟踪Activity带值跳转实训 1 项目设计思路和使用技术本项目实现Activity带值跳转 在第一个界面中有一个输入框和一个按钮 先在输入框中输入一个mail地址 然后按按钮实现带值跳转 在第二个界面中把传递过来的值使用TextView控件进行显示 在各个关键点插入Logcat语句进行关键信息的显示 帮助开发者进行调试判断 涉及的技术有Activity之间的显示跳转 放入值的方法和取值方法 以及使用Logcat跟踪调试的方法 2 6 1使用Logcat跟踪Activity带值跳转实训 2 项目演示效果以及实现步骤 a 项目启动后输入内容 b 跳转后界面 c Logcat过滤器的设置 2 6 1使用Logcat跟踪Activity带值跳转实训 d Logcat信息观察窗口显示的信息 2 6 1使用Logcat跟踪Activity带值跳转实训 项目实现过程如下 1 在Eclipse中新建项目 名称为Valuejumptest1 2 实现本项目的两个Activity和对应的布局文件 分别是MainActivity java 对应布局文件为activity main xml 和第二个界面SecondActivity java 对应布局文件是activity second xml 3 修改AndroidManifest xml文件 增加第二个Activity SecondActivity 的声明 4 在关键处插入Logcat语句进行判断 2 6 1使用Logcat跟踪Activity带值跳转实训 3 关键代码1 MainActivity java关键代码1 protectedvoidonCreate BundlesavedInstanceState 2 super onCreate savedInstanceState 3 setContentView R layout activity main 4 button1 Button findViewById R id button1 5 mailText EditText findViewById R id editText1 6 button1 setOnClickListener newOnClickListener 7 Override8 publicvoidonClick Viewv 得到输入的信息并转化为字符9 Stringmsg mailText getText toString 10 Log v tag 输入的信息是 msg 插入的Logcat观察语句11 Intentintent newIntent 12 intent setClass MainActivity this SecondActivity class 使用putExtra 方法带值传递13 intent putExtra mail msg 14 startActivity intent 15 16 2 6 1使用Logcat跟踪Activity带值跳转实训 2 SecondActivity java关键代码1 publicclassSecondActivityextendsActivity 2 privatestaticfinalStringtag VALUELOG 3 privateTextViewmailtext 4 Override5 publicvoidonCreate BundlesavedInstanceState 6 super onCreate savedInstanceState 7 setContentView R layout activity second 8 Log v tag 已经正常跳转 插入的Logcat观察语句9 mailtext TextView findViewById R id textView1 10 Intentintent getIntent 获取返回Intent对象11 Stringgetmsg intent getStringExtra mail 获取传递的值12 Log v tag 判断是否正确的取值 getmsg 插入的Logcat观察语句13 mailtext setText 您传递的内容是 getmsg 将传递的值显示在第二个界面中14 2 6 2使用断
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 登记资料规范管理办法
- 红白喜事卫生管理办法
- 物资合同管理办法细则
- 甘肃农村道路管理办法
- 破产事务机构管理办法
- 2025-2030中国造纸行业环保政策影响与技术升级报告
- 2025-2030中国跨境支付系统合规风险与金融科技创新调研
- 2025年法律职业资格考试民法练习卷:物权法与合同法比较分析
- 荆门市科技公司劳动合同4篇
- 2026届北京市首都师大附中物理八年级第一学期期末预测试题含解析
- 图像特征提取讲解
- 多彩贵州地方课程课件
- 劳技自制收纳盒课件
- 《管理学基础与实务》 课件全套 曾宪达 第1-11章 管理与管理者- 管理创新
- 2025年复工复产考核试题及答案
- 快餐公司门店设备夜间关闭管理制度
- 【公路监理大纲】公路工程监理大纲(含桥隧工程)
- 2025年高考真题物理(山东卷)
- 产后尿潴留护理查房
- 小学健康教育二年级教案
- 一年级上册语文 快乐读书吧 《和大人一起读》知识点梳理
评论
0/150
提交评论