使用FLAG_ACTIVITY_CLEAR_TOP测试活动是否已启动

Ego*_*gor 7 android unit-testing robolectric android-activity

Robolectric允许测试Activity已经开始使用shadowOf(activity).peekNextStartedActivity().但是,如果Activity启动此方法似乎不起作用FLAG_ACTIVITY_CLEAR_TOP.这是直观的,因为此标志的目的不是启动新标志,Activity而是将现有Activity的后备堆栈放在前面.有没有办法测试这种情况?

UPDATE

我的测试场景如下:

涉及3个活动,我们称之为A,B和C.测试中的活动是B,由A.开始.B现在开始C表示结果,当收到结果时,使用FLAG_ACTIVITY_CLEAR_TOP标志返回A. 即使当时堆栈中没有活动A,我也希望它能够启动并通过peekNextStartedActivity().

ymz*_*ymz 6

每当您从活动发送意图时(例如),您都可以使用 set flags 方法:

Intent i = new Intent(MyActivity.this, SomeActivity.class);
i.setFlags(FLAG_ACTIVITY_CLEAR_TOP | SOME_OTHER_FLAGS...);
startActivity(i);
Run Code Online (Sandbox Code Playgroud)

在结果活动(示例中的 SomeActivity)上,您可以使用 getIntent 方法:

getIntent().getFlags()
Run Code Online (Sandbox Code Playgroud)

所以真正的问题是:如何将标志拆分为其基本组件(按位或)

基于这篇文章:http : //code.tutsplus.com/articles/understanding-bitwise-operators--active-11301

只需使用您需要的组件检查标志

if ((getIntent().getFlags() & FLAG_ACTIVITY_CLEAR_TOP) != 0)
{
     // do something here
}
Run Code Online (Sandbox Code Playgroud)