《Android应用开发攻略》——3.10 为测试重现活动生命周期场景

简介: 本节书摘来自华章计算机《Android应用开发攻略》一书中的第3章,第3.10节,作者:(美)达尔文(Darwin, I. F.)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.10 为测试重现活动生命周期场景

Daniel Fowler
3.10.1 问题
应用程序应该适应活动生命周期。开发人员必须知道如何重现不同的生命周期场景。
3.10.2 解决方案
利用日志获得对活动生命周期的全面了解,就能更容易地为测试重现生命周期场景。
3.10.3 讨论
Android是为了移动的生活方式而设计的,在这种方式下,用户忙于多种工作:打电话、检查邮件、发送SMS信息、参与社交网络、拍照、访问互联网、运行应用程序等,甚至完成某些工作!因此,移动设备可能有多个应用程序,从而在内存中加载许多活动。前台应用及当前活动可能在任何时刻被打断和暂停。暂停的应用程序和活动也可能从内存中删除,为新启动的应用程序释放内存。应用程序的生命周期不受其控制,因为Android操作系统负责启动、监控、暂停、恢复和删除应用的活动。但是,活动知道发生了什么,因为在活动实例化、隐藏和删除时,会调用各种函数,这使得活动能够跟踪操作系统对应用程序所进行的操作,我们在攻略1.6中已经讨论过这一点。
因为上述原因,应用程序开发人员熟悉活动启动时调用的函数:
onCreate(Bundle savedInstanceState){...};
onStart(){...};
onResume(){...};
以及活动暂停并从内存中删除(销毁)时调用的函数:
onPause(){...};
onStop(){...};
onDestroy(){..};
打开攻略1.4中的程序,就可以看到以上函数的运行情况。然后,在主活动类中,覆盖上述的6个函数,调用其超类版本。添加Log.d()调用传递应用程序名称和被调用的函数,代码参见例3-7。
例3-7:生命周期日志

public class Main extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Log.d("MyAndroid", "onCreate");
    }
    @Override
    public void onStart() {
        super.onStart();
        Log.d("MyAndroid", "onStart");
    }
    @Override
    public void onResume() {
        super.onResume();
        Log.d("MyAndroid","onResume");
    }
    @Override
    public void onPause() {
        super.onPause();
        Log.d("MyAndroid","onPause");
    }
    public void onStop() {
        super.onStop();
        Log.d("MyAndroid","onStop");
    }
    public void onDestroy() {
        super.onDestroy();
        Log.d("MyAndroid","onDestroy");
    }
}

运行程序。显示LogCat视图查看调试信息。调试信息在Dalvik Debug Monitor Server(DDMS)视图中默认可见,你也可以通过Window菜单选项打开它。单击Window→Show View→Other,展开Android并选择LogCat,LogCat视图出现在底部的选项卡中。
单击Eclipse右上角的DDMS按钮可以打开DDMS视图,如图3-16所示。

image


LogCat视图将出现在底部的选项卡中。如果该视图不可见,使用前面提到的Window菜单方法,或者选择Window→Reset Perspective。你可以从Eclipse中拖动选项卡,将LogCat拖离所在的窗口。启动程序之后,你可以看到添加到启动函数中的3条调试信息(见图3-17)。

image


按下Back按键时,你将看到3条卸载信息(见图3-18)。
添加一个LogCat过滤器可以仅查看来自应用程序的信息。单击LogCat屏幕右上角的绿色加号。为过滤器取名,并在Log Tagtag字段中输入MyAndroid(见图3-19)。
现在,LogCat显示一个新的选项卡,其中只包含明确地从应用程序中发送的信息(见图3-20)。

image
image


可以单击右上角的图标(带有红×的页面),清除LogCat输出。这样有助于在执行查看更多信息的操作之前得到干净的表单。
为了查看程序暂停时调用的函数,在MyAndroid程序之上再打开一个应用程序。首先添加onRestart()函数和调试信息。
@Override
public void onRestart() {
    super.onRestart();
    Log.d("MyAndroid","onRestart");
}

运行该程序,单击Home按钮,然后从设备(或者模拟器)上再次启动程序。
LogCat显示通常的启动函数顺序;然后,当单击Home按钮时,运行onPause()和 onStop(),但是没有运行onDestroy()。该程序没有结束,但是处于休眠状态。当程序再次运行,它并没有重新加载,所以没有运行onCreate(),而是调用onRestart()。
在设备或者模拟器上再次运行该程序,然后进入Manage Applications(应用程序管理)菜单,方法是Settings(设置)→Applications(应用程序),选择程序,并单击Force Close(强制关闭)按钮。从设备(或者模拟器)再次启动程序。
调用通常的启动函数,然后活动“休眠”。由于第二个实例运行,没有看到onDestroy()。
在本攻略中,我们讨论了如下不同的生命周期场景:
正常启动,然后结束。
启动、暂停再重新启动(见图3-21)。

image


启动、暂停、强制从内存中删除,然后再次启动(见图3-22)。

image


这些场景造成了不同的生命周期函数执行顺序。在测试时使用这些场景能够确保应用程序正确执行。你可以在实现更多覆盖函数的时候扩展这种技术,它也适用于测试活动中的程序片段的生命周期。
相关文章
|
11月前
|
边缘计算 安全 5G
高精度时钟同步测试仪:构建全场景时间同步生态
在数字化转型中,时间同步至关重要。西安同步电子科技的 SYN5106 高精度时钟测试仪,具备±20ns 时差测量精度与 GPS/北斗双模授时能力,广泛应用于电力、通信、金融和科研领域。它解决变电站时间偏差、5G 基站同步误差及高频交易延迟等问题,助力智能电网、5G 网络和科研实验。产品便携可靠,支持多协议,满足国家安全要求,为各行业提供精准时间同步解决方案。未来将探索量子通信与深空探测等领域,持续推动技术创新。
|
7月前
|
人工智能 边缘计算 搜索推荐
AI产品测试学习路径全解析:从业务场景到代码实践
本文深入解析AI测试的核心技能与学习路径,涵盖业务理解、模型指标计算与性能测试三大阶段,助力掌握分类、推荐系统、计算机视觉等多场景测试方法,提升AI产品质量保障能力。
|
存储 人工智能 编译器
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
990 11
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
|
11月前
|
编解码 5G 定位技术
时间频率综合测试仪优势所在及场景使用介绍
时间频率综合测试仪是保障系统精准运行的关键设备。以西安同步电子科技有限公司的SYN5104型为例,它集时间标准源、时差测量和频率测试于一体,功能涵盖时间准确度、频率分析、PPS/B码/E1/PTP/NTP测试等,精度达30ns。其便携设计适用于研发、标定、现场检测,支持电力系统校准、通信同步测试及科研校准等场景,助力高精度时频同步与产品质量提升。文章版权归西安同步电子科技有限公司所有,严禁侵权。
|
缓存 Java 测试技术
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
2007 3
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
564 1
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
机器学习/深度学习 人工智能 自然语言处理
探索自动化测试在软件开发生命周期中的关键作用
在当今快节奏的软件开发环境中,自动化测试已成为确保软件质量和加速产品上市时间的重要工具。本文深入探讨了自动化测试在软件开发生命周期(SDLC)各个阶段的应用和效益,包括需求分析、设计、编码、测试和维护等环节。通过具体案例分析,展示了自动化测试如何帮助团队提高测试效率、减少人为错误并缩短产品迭代周期。文章还讨论了实施自动化测试时面临的挑战,如选择合适的工具、编写可维护的测试脚本和处理动态变化的需求,以及如何克服这些挑战的策略。最后,提出了自动化测试的未来趋势,强调了持续集成/持续部署(CI/CD)流程中自动化测试的重要性,以及人工智能和机器学习技术在自动化测试领域的潜力。
412 14
|
JavaScript 安全 编译器
TypeScript 与 Jest 测试框架的结合使用,从 TypeScript 的测试需求出发,介绍了 Jest 的特点及其与 TypeScript 结合的优势,详细讲解了基本测试步骤、常见测试场景及异步操作测试方法
本文深入探讨了 TypeScript 与 Jest 测试框架的结合使用,从 TypeScript 的测试需求出发,介绍了 Jest 的特点及其与 TypeScript 结合的优势,详细讲解了基本测试步骤、常见测试场景及异步操作测试方法,并通过实际案例展示了其在项目中的应用效果,旨在提升代码质量和开发效率。
377 6
|
网络协议 关系型数据库 应用服务中间件
【项目场景】请求数据时测试环境比生产环境多花了1秒是怎么回事?
这是一位粉丝(谢同学)给V哥的留言,描述了他在优化系统查询时遇到的问题:测试环境优化达标,但生产环境响应时间多出1秒。通过抓包分析,发现MySQL请求和响应之间存在500毫秒的延迟,怀疑是网络传输开销。V哥给出了以下优化建议:
365 4
|
Android开发 开发者 UED
深入理解安卓应用开发中的生命周期管理
本文旨在探讨安卓应用开发中生命周期管理的重要性,以及如何有效利用生命周期解决常见问题。通过分析安卓应用生命周期的不同阶段及其特点,提供实用的代码示例和调试技巧,帮助开发者优化应用性能,提升用户体验。
460 8

热门文章

最新文章