Android 系列 3.11重现活动生命周期测试的场景

来源:互联网 发布:模拟打击垫软件 编辑:程序博客网 时间:2024/05/26 12:04
3.11重现活动生命周期测试的场景


问题
应用程序应该适应活动生命周期。开发人员需要知道如何重现不同的生命周期场景。

使用日志记录来了解活动生命周期。因此,对于应用程序测试,生命周期场景更容易重现。
讨论
Android是为旅途中的生活而设计的,用户从事多种任务:接听电话,检查电子邮件,发送短信,参与社交网络,拍照,访问互联网,运行应用等,甚至可以获得一些完工!因此,设备可以具有加载到存储器中的多个应用,并且因此具有多个活动。前台应用程序及其当前活动可以随时中断和暂停。可以从内存中删除暂停的应用程序及活动,以释放新启动的应用程序的空间。应用程序具有无法控制的生命周期,因为它是启动,监视,暂停,恢复和销毁应用程序活动的Android操作系统。然而,一个活动确实知道发生了什么,因为当活动被实例化,隐藏和销毁时,各种函数被调用。这允许活动跟踪操作系统正在对应用程序做什么,如我们在配方1.2中讨论的。
因为这一切,应用程序开发人员熟悉活动启动时调用的函数:
•onCreate(Bundle savedInstanceState){...};
•onStart(){...};
•onResume(){...};
和当活动暂停然后从内存中删除(被销毁)时调用的函数:
•onPause(){...};
•onStop(){...};
•onDestroy(){..};
要看到它们在行动,只需打开从食谱1.13的程序。然后,在主活动类中,覆盖所有六个上述函数,调用到超类版本。添加对Log.d()的调用,以传递应用程序的名称和要调用的函数。代码看起来像例3-11。

实例3-11。生命周期记录

public class Main extends Activity {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);Log.d("MyAndroid", "onCreate");}@Overridepublic void onStart() {super.onStart();Log.d("MyAndroid", "onStart");}@Overridepublic void onResume() {super.onResume();Log.d("MyAndroid","onResume");}@Overridepublic 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)透视图中可见,或者您可以通过窗口菜单选项打开它。单击窗口→显示视图→其他,展开Android,然后选择LogCat。 LogCat视图显示在底部的选项卡上。要打开DDMS透视图,请单击Eclipse右上角的DDMS按钮。它应该看起来像图3-23。


图3-23。 DDMS透视图
LogCat视图将位于底部的选项卡上。如果不可见,请使用前面提到的Window方法,或选择Window→Reset Perspective。您可以通过从Eclipse拖动选项卡将LogCat拖放到自己的窗口中。启动程序后,您可以看到添加到启动功能的三个调试消息(图3-24)。


图3-24。活动启动消息
当按下返回键时,您将看到三个拆卸消息(图3-25)。


图3-25。活动拆除消息
要仅查看来自应用程序的消息,请添加LogCat过滤器。单击LogCat屏幕右上角的绿色加号。为过滤器命名并在Log Tagtag字段中输入MyAndroid(参见图3-26)。


图3-26。使用LogCat过滤
LogCat现在将显示一个新的选项卡,只显示从应用程序显式发送的消息(见图3-27)。通过更改头配置可以进一步简化Logcat输出(使用Logcat区域左侧的齿轮图标)。 LogCat输出可以通过单击Logcat区域左侧的垃圾桶图标来清除。在执行操作以查看更多消息之前,有一个干净的工作表很有用。现在测试当应用程序通过MyAndroid程序打开时调用的函数。首先添加onRestart()函数和调试消息。


图3-27。已过滤的消息
您可以通过单击显示具有小红色×的页面的右上图标来清除LogCat输出。在执行操作以观看更多消息之前,有一个干净的工作表可能很有用。
要查看程序暂停时调用的函数,请通过MyAndroid程序打开应用程序。首先添加onRestart()的函数和调试消息。

@Overridepublic void onRestart() {super.onRestart();Log.d("MyAndroid","onRestart");}
运行程序,单击Home按钮,然后从设备(或模拟器)再次启动程序。
LogCat显示通常的启动功能序列;然后,当主页按钮被点击时,onPause()和onStop()运行,而不是onDestroy()。程序没有结束,但有效地睡觉。当程序再次运行时不会重新加载,因此没有onCreate()执行,而是onRestart()被调用。
在设备或模拟器上再次运行程序,然后进入管理应用程序(通过设置→应用程序),选择程序,然后单击强制关闭按钮。然后从设备(或仿真器)重新启动程序。调用通常的启动函数,然后调用活动“sleeps”。没有onDestroy()被看作是第二个实例运行。
在这个配方中,我们讨论了以下不同的生命周期场景:
•正常启动,然后完成
•启动,暂停,然后重新启动(参见图3-28)
•启动,暂停,强制从内存中删除,然后再次启动(见图3-29)


图3-28。重新启动应用程序


图3-29。强制停止消息
这些情况导致执行的生命周期函数的不同序列。在测试时使用这些方案可确保应用程序为用户正确执行。在实现其他覆盖函数时,可以扩展此处所示的技术。这些技术还适用于在活动中使用片段并测试其生命周期。

0 0
原创粉丝点击