启动activity同步时,将一个activity放回前台时会挂起。

5

我正在编写一个测试,启动我的主活动,并在此之后通过使用以下意图将其置于后台,并通过启动主页来实现:

    Intent intent= new Intent(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_HOME);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

之后,我尝试使用类似上面的意图(它没有CATEGORY_HOME标志,而是添加了活动的名称和包),将我的应用程序的活动放回前台。由于我需要确保我的应用程序的活动已成功启动,所以我使用了来自Instrumentation的“startActivitySync”方法。
当我运行测试时,我看到应用程序成功地被放置到后台,然后回到前台,但测试运行永远不会完成。它永远停留在“startActivitySync”方法中。为什么会发生这种情况?
3个回答

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();
}

0

有很多这样的问题,但几乎所有答案都建议完成一个活动,我认为在大多数情况下并不起作用。

如果您的活动没有完成,那就意味着某些UI操作正在继续运行。实际上,这可能意味着您的活动出了问题。例如,最近我遇到了类似的问题,并发现动画没有适当地停止:

Animation anim = AnimationUtils.loadAnimation(getContext(), R.anim.rotate_infinite_clockwise);
view.startAnimation(anim);

因此,解决问题最直接的方法是逐个禁用视图。


0

不要使用这个构造函数:

Intent intent = new Intent(String action);

试一试这个:

Intent intent = new Intent(Context packageContext, Class<?> cls):

我遇到了一个类似的问题,使用startActivitySync(Intent)时会卡住,这个方法解决了我的问题。它在第一次测试时运行良好,但在同一类中的后续测试中失败了。为什么?我不知道。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接