我正在编写一个启动我的主要活动的测试,然后,我通过使用以下意图启动主屏幕将其置于后台:
Intent intent= new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
之后,我尝试使用与上面类似的意图将我的应用程序的活动放回到前台(它没有CATEGORY_HOME标志,而是我添加了活动的名称和包)。由于我需要确保我的应用程序的活动已成功启动,因此我使用了Instrumentation中的“startActivitySync”方法。
当我运行测试时,我看到应用程序已成功放入后台,然后返回到前台,但测试运行永远不会完成。它永远挂在“startActivitySync”方法中。有关为什么会发生这种情况的任何想法?
答案 0 :(得分:1)
根据我的经验:
public testOne(){
MyActivity first = startActivitySync(...);
first.finish();
MyActivity second = startActivitySync(...);
}
public testTwo(){
MyActivity first = startActivitySync(...);
...
}
,testOne()将成功,
但testTwo()将挂起“startActivitySync”。
建议修复:
在每次测试结束时清理已开始的活动,例如:
public testOne(){
MyActivity first = startActivitySync(...);
first.finish();
MyActivity second = startActivitySync(...);
second.finish();
}
public testTwo(){
MyActivity first = startActivitySync(...);
first.finish();
}
答案 1 :(得分:0)
而不是使用此构造函数:
Intent intent = new Intent(String action);
试试这个:
Intent intent = new Intent(Context packageContext, Class<?> cls):
我遇到了startActivitySync(Intent)
挂起的类似问题,这为我解决了这个问题。它在第一次测试时运行良好,但在同一级别的后续测试中失败。为什么?我不知道。
答案 2 :(得分:0)
还有很多这样的问题,但几乎所有的回答者都建议完成一项我认为在大多数情况下不起作用的活动。
如果您的活动尚未完成,则仅表示某些UI操作继续运行。实际上,这可能意味着您的活动出现了问题。例如,最近我遇到了类似的问题,发现动画没有被适当地停止:
Animation anim = AnimationUtils.loadAnimation(getContext(), R.anim.rotate_infinite_clockwise);
view.startAnimation(anim);
因此,解决问题最直接的方法是逐个禁用视图。