0
点赞
收藏
分享

微信扫一扫

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


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 {
@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)透视图中可见,或者您可以通过窗口菜单选项打开它。单击窗口→显示视图→其他,展开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()的函数和调试消息。


@Override
public 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 条评论