引言
Activity介绍
1、Activity 概览
Activity是Android最基本的四大组件之一(Activity,Service,ContentProvider,BroadcastReceiver),其中Activity主要负责与用户进行交互。
提到应用与用户的交互,最常见的是页面形式,对于单个页面,从实现上说会有很多元素,可归类为M(model)V(view)C(control),这些元素数据可以通过Activity进行集成管理,最终展示一个用户交互的页面。当然,页面的实现除了Activity之外还有Fragment,本次我们主要介绍Activity。
通常,应用中的一个Activity会被指定为主Activity,然后,每个Activity可以启动另一个Activity,以执行不同的操作。另外,Activity也会经常启动属于其他应用的Activity。例如,浏览器应用的Activity可能会启动社交媒体应用的“分享”Activity。
2、Activity生命周期
Activity的生命周期直接影响到与用户的交互,因此生命周期很重要。当用户浏览、退出和返回到应用时,应用中的Activity会在其生命周期的不同状态间转换。
为了在Activity生命周期的各个阶段之间导航转换,Activity 类提供六个核心回调方法:onCreate()、onStart()、onResume()、onPause()、onStop() 和 onDestroy()。
onCreate()
此回调方法会在系统创建Activity时触发。onCreate()完成后,下一个回调方法将是onStart()。
onStart()
onCreate() 退出后,Activity将进入“已启动”状态,并对用户可见。此回调方法包含 Activity进入前台与用户进行互动之前的最后准备工作。
onResume()
系统会在Activity开始与用户互动之前调用此回调方法。此时,该Activity位于Activity堆栈的顶部,并会捕获所有用户输入。应用的大部分核心功能都是在onResume()方法中实现的。此类输入事件可包括接到来电、用户导航到另一个Activity,或设备屏幕关闭。onResume()回调方法后面总是跟着onPause() 。
onPause()
系统将此方法视为用户将要离开您的Activity的第一个标志(这并不总是意味着Activity会被销毁);此方法表示Activity不再位于前台(在用户处于多窗口模式时Activity仍然可见)。例如,当用户点击“返回”或“最近使用的应用”按钮时,就会出现此状态。
onPause()执行完毕后,下一个回调方法为onStop()或onResume(),具体取决于 Activity进入“已暂停”状态后发生的情况。
onStop()
当Activity对用户不再可见时,系统会调用onStop()。出现这种情况的原因可能是Activity被销毁,新的Activity启动,或者现有的Activity正在进入“已恢复”状态并覆盖了已停止的Activity。在所有这些情况下,停止的Activity都将完全不再可见。
系统调用的下一个回调方法将是onRestart()(如果Activity重新与用户互动)或者onDestroy()(如果Activity彻底终止)。
onRestart()
当处于“已停止”状态的Activity即将重启时,系统就会调用此回调。onRestart() 会从 Activity停止时的状态恢复Activity。此回调方法后面总是跟着onStart()。
onDestroy()
系统会在销毁Activity之前调用此回调方法。通常,实现onDestroy() 是为了确保在销毁Activity或包含该Activity的进程时释放该Activity的所有资源。
系统调用此回调方法的原因如下:
① Activity即将结束(由于用户彻底关闭Activity或由于系统为Activity调用 finish());
② 由于配置变更(例如设备旋转或多窗口模式),系统暂时销毁Activity。
在应用的生命周期中,应用很可能会多次进入和退出Activity。例如,用户可以点击设备的返回按钮,或者Activity可能需要启动不同的Activity。如果Activity位于前台,并且用户点按了返回按钮,Activity将依次经历onPause()、onStop() 和onDestroy() 回调。活动不仅会被销毁,还会从返回堆栈中移除。
Activity测试总结
1、Activity查询方式
方法一:
1、cmd命令中输入:adb logcat | grep ActivityManager 运行应用,可以实时查看当前正在运行的Activity;
另外,也可以通过输入:adb logcat ActivityManager:I MyApp:D *:S,过滤标记为“ActivityManager”和“MyApp”的日志信息。
方法二:
1、cmd命令中输入:adb shell dumpsys activity activities;
也可以使用adb shell dumpsys window | findstr mCurrentFocus 命令查看当前运行的包名和Activity更清晰一些。
2、测试注意点
Activity是应用中每次用户互动的容器,因此测试应用的Activity时,可以关注以下测试点:
1)Activity相关的应用交互页面的数据、布局、网络请求等的展示响应的正确性;
2)其他应用中断了应用的Activity,例如,在使用应用时接听来电,或切换至另一应用的场景;
3)系统销毁又重新创建了您的Activity,例如,当用户离开应用并在稍后返回时,是否会丢失用户的进度;
4)当屏幕在横向和纵向之间旋转时,是否会崩溃或丢失用户的进度;
5)用户将您的Activity放置在新的窗口环境中,例如画中画 (PIP) 或采用多窗口模式的环境,相关交互页面的展示;
6)当Activity多次调用时,是否会因销毁不当,引发内存泄漏的问题。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理