《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


这些场景造成了不同的生命周期函数执行顺序。在测试时使用这些场景能够确保应用程序正确执行。你可以在实现更多覆盖函数的时候扩展这种技术,它也适用于测试活动中的程序片段的生命周期。
相关文章
|
16天前
|
存储 人工智能 编译器
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
36 10
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
|
21天前
|
缓存 Java 测试技术
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
151 3
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
|
2月前
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
43 1
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
探索自动化测试在软件开发生命周期中的关键作用
在当今快节奏的软件开发环境中,自动化测试已成为确保软件质量和加速产品上市时间的重要工具。本文深入探讨了自动化测试在软件开发生命周期(SDLC)各个阶段的应用和效益,包括需求分析、设计、编码、测试和维护等环节。通过具体案例分析,展示了自动化测试如何帮助团队提高测试效率、减少人为错误并缩短产品迭代周期。文章还讨论了实施自动化测试时面临的挑战,如选择合适的工具、编写可维护的测试脚本和处理动态变化的需求,以及如何克服这些挑战的策略。最后,提出了自动化测试的未来趋势,强调了持续集成/持续部署(CI/CD)流程中自动化测试的重要性,以及人工智能和机器学习技术在自动化测试领域的潜力。
|
3月前
|
搜索推荐 Android开发 开发者
安卓应用开发中的自定义控件实践
在安卓应用开发的广阔天地中,自定义控件如同璀璨的星辰,点亮了用户界面设计的夜空。它们不仅丰富了交互体验,更赋予了应用独特的个性。本文将带你领略自定义控件的魅力,从基础概念到实际应用,一步步揭示其背后的原理与技术细节。我们将通过一个简单的例子——打造一个具有独特动画效果的按钮,来展现自定义控件的强大功能和灵活性。无论你是初学者还是资深开发者,这篇文章都将为你打开一扇通往更高阶UI设计的大门。
|
4月前
|
存储 XML 开发工具
探索安卓应用开发:从基础到进阶
在这篇文章中,我们将一起踏上安卓应用开发的旅程。不论你是编程新手还是希望提升技能的开发者,这里都有你需要的东西。我们会从最基础的概念开始,逐步深入到更复杂的主题。文章将涵盖开发环境设置、用户界面设计、数据处理以及性能优化等方面。通过理论与实践的结合,你将能够构建出既美观又高效的安卓应用。让我们一起开启这段技术之旅吧!
|
4月前
|
缓存 监控 前端开发
探索Android应用开发之旅:从新手到专家
【10月更文挑战第42天】本文将带你踏上Android应用开发的旅程,无论你是初学者还是有经验的开发者。我们将一起探索如何从零开始创建你的第一个Android应用,并逐步深入到更高级的主题,如自定义视图、网络编程和性能优化。通过实际示例和清晰的解释,你将学会如何构建高效、吸引人的Android应用。让我们一起开启这段激动人心的旅程吧!
|
4月前
|
开发框架 前端开发 Android开发
探索安卓和iOS应用开发中的跨平台解决方案
【10月更文挑战第42天】在移动应用开发的广阔天地中,安卓和iOS系统如同两座巍峨的山峰,分别占据着半壁江山。开发者们在这两座山峰之间穿梭,努力寻找一种既能节省资源又能提高效率的跨平台开发方案。本文将带你走进跨平台开发的世界,探讨各种解决方案的优势与局限,并分享一些实用的代码示例,助你在应用开发的道路上更加游刃有余。
|
4月前
|
Android开发 Swift iOS开发
深入探索iOS与Android操作系统的架构差异及其对应用开发的影响
在当今数字化时代,移动设备已经成为我们日常生活和工作不可或缺的一部分。其中,iOS和Android作为全球最流行的两大移动操作系统,各自拥有独特的系统架构和设计理念。本文将深入探讨iOS与Android的系统架构差异,并分析这些差异如何影响应用开发者的开发策略和用户体验设计。通过对两者的比较,我们可以更好地理解它们各自的优势和局限性,从而为开发者提供有价值的见解,帮助他们在这两个平台上开发出更高效、更符合用户需求的应用。
|
4月前
|
前端开发 Android开发 UED
安卓应用开发中的自定义控件实践
【10月更文挑战第35天】在移动应用开发中,自定义控件是提升用户体验、增强界面表现力的重要手段。本文将通过一个安卓自定义控件的创建过程,展示如何从零开始构建一个具有交互功能的自定义视图。我们将探索关键概念和步骤,包括继承View类、处理测量与布局、绘制以及事件处理。最终,我们将实现一个简单的圆形进度条,并分析其性能优化。

热门文章

最新文章

  • 1
    【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
    55
  • 2
    android FragmentManager 删除所有Fragment 重建
    25
  • 3
    Android实战经验之Kotlin中快速实现MVI架构
    39
  • 4
    即时通讯安全篇(一):正确地理解和使用Android端加密算法
    38
  • 5
    escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
    43
  • 6
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    151
  • 7
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    50
  • 8
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    66
  • 9
    Android历史版本与APK文件结构
    169
  • 10
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    52