无法在45秒内启动意图。也许主线程在合理的时间内没有闲置?
我正在写浓缩咖啡测试。下面是测试案例无法在45秒内启动意图。也许主线程在合理的时间内没有闲置?
晶圆厂的OnClick,启动应用QuizActivity。
让我向你解释一点关于我的应用程序。
所以应用程序的要求是 -
- 有资产的文件夹JSON文件
- 我必须分析它,并把数据存储在数据库
- 在主要活动从数据库中加载这些数据转化为recyclerview 。还有的Fab按钮,在点击它的应用程序传递数据的随机列表(这是我在recyclerview已加载)到QuizActivity
这是我如何做编码 -
- 在MainActivity的onCreate()使用AsyncTask解析数据并将数据插入数据库一次。
- 一旦数据可用,通过AsyncTaskLoader将其加载到recyclerview中
- 在Fab上设置Onclick监听器。并将所需数据传递给QuizActivity。
下面是我的测试
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
/* @Rule
public IntentsTestRule<MainActivity> intentsTestRule =
new IntentsTestRule<MainActivity>(MainActivity.class);
*/
@Rule
public ActivityTestRule<MainActivity> intentsTestRule =
new ActivityTestRule<MainActivity>(MainActivity.class,false,true);
@Test
public void fabTest(){
onView(withId(R.id.fab)).perform(click());
//Check if the text_question textview is displayed
onView(withId(R.id.text_question)).check(matches(isDisplayed()));
}
/* @Test
public void clickFloatingActionButton() {
onView(withId(R.id.fab))
.perform(click());
intended(hasComponent(new ComponentName(getTargetContext(), QuizActivity.class)));
}*/
}
我的办法是 -
- 查找的Fab
- 执行单击
- 检查显示text_question TextView的。注意这个textview是在QuizActivity上。
后,我跑我得到了测试
了java.lang.RuntimeException:无法启动意图意图{ 行为= android.intent.action.MAIN FLG = 0x14000000 CMP = my_package_name/.MainActivity}在45秒内。主线程可能在合理的时间内没有闲置? 有可能是一个动画或不断重新绘制 屏幕。或者该活动正在创建网络电话?请参阅 线程转储日志。为了便于参考,最后一次事件队列为 ,在您的活动启动请求为1505287862579并且现在为 上次队列空闲时为空闲:1505287862579.如果这些数字是 ,则您的活动可能占用事件队列。
PS - 我已经关闭了所有的动画。代码中没有进度条。
而且更一个音符,如果我注释掉的AsyncTask,AsyncTaskLoader中的onCreate RecyclerView部分()方法,那么测试在流逝。
我怀疑它可能是由于后台任务造成的。
任何人都面临类似的问题?如果您知道解决方案,请告诉我。我挣扎了两天。我在stackoverflow上搜索类似的线程,但没有为我工作。
我终于得到了解决方案!
其实,罪魁祸首是我的适配器中的自定义视图。
咖啡等到AsyncTask
或AsyncTaskLoader
加载数据,但它看起来像自定义视图作为例外规定导致此问题:
主线程的一段合理的时间内一直没有去闲? 有可能是一个动画或不断重新绘制 屏幕。
不管怎么说为了克服这个问题,我需要做的是 -
“如果在测试运行设置自定义视图的知名度水涨船高”
,你会怎么做?
private AtomicBoolean isTestRunning;
public synchronized boolean isTestRunning() {
if (null == isTestRunning) {
boolean istest;
try {
Class.forName ("Full path of your TestName"); // for e.g. com.example.MyTest
istest = true;
} catch (ClassNotFoundException e) {
istest = false;
}
isTestRunning = new AtomicBoolean (istest);
}
return isRunningTest.get();
}
现在,这里我使用Recyclerview
所以在ViewHolder
,
public InsectHolder(View itemView)
{
super(itemView);
customView = (DangerLevelView) itemView.findViewById(R.id.danger_level_tv);
if(isRunningTest()) {
customView.setVisibility(View.GONE);
}
}
而且耶!你的测试会通过。
希望有人认为它有帮助!
如果您在下面的评论部分有任何问题,请让我知道!