我正在为我们用3个按钮编写的活动编写活动测试。其中2个按钮开始其他活动。
我可以编写一个模拟按钮按下的测试,然后检查所需的活动是否正在运行,但我无法从第二个活动中退回。第二个活动停留在前面,并阻止其他测试(假设第一个活动正在运行)正常工作。他们只是冻结了。
我有第一个活动的引用,但这是我需要的第二个活动,我猜是调用finish()。有没有办法做到这一点?
编辑:我在这个要点中添加了一些实际的源代码来说明我的问题:https://gist.github.com/3076103
具体是关于测试活动。在生产代码中一切都很好。
答案 0 :(得分:2)
您应该使用http://developer.android.com/reference/android/app/Instrumentation.ActivityMonitor.html来获取第二个活动的引用,或者您可以阻止第二个活动被启动(仍然保证您启动第二个活动的调用已达到框架之前)
答案 1 :(得分:0)
您需要一种方法让您的活动相互沟通,以便一项活动可以告诉对方完成。有几种方法可以实现这一目标。一种方法是在我的应用程序中创建服务;我的“第二”活动将连接到此服务以注册接收消息的方式,我的主要活动将连接以提供它们。
答案 2 :(得分:0)
在Activity1中添加以下内容以启动Activity2
Intent myIntent = new Intent(view.getContext(), Activity2.class);
startActivityForResult(myIntent, 0);
在Activity2中添加以下内容以启动Activity1并完成Activity2
Intent intent = new Intent();
setResult(RESULT_OK, intent);
finish();
有关详情:http://www.warriorpoint.com/blog/2009/05/24/android-how-to-switch-between-activities/
答案 3 :(得分:0)
如果您使用startActivityForResult启动活动,则可以使用finishActivity(int requestCode)关闭来自父级的活动。
开始活动:
startActivityForResult(new Intent(...), 123123 /*requestCode*/);
如果您想完成该活动(来自来电者),请使用:
finishActivity(123123 /*requestCode*/)
还有一种方法可以找到儿童活动是否已经完成。但是,只有在子活动为自己调用finish()时才能跟踪此信息。要接收来自孩子的子完成请求,您需要覆盖父活动中的finishFromChild()方法。