【发布时间】:2017-12-05 18:09:55
【问题描述】:
我的班级是这样做的:
public void doThing() {
Doer doer = new Doer();
Thread thread = new Thread(doer);
thread.start();
}
'Doer' 类是一个内部类:
private class Doer implements Runnable {
public void run() {
Intent myIntent = new Intent(mContext, MyService.class);
mContext.startService(myIntent);
...Some more stuff...
}
这很好用。
我需要使用 Robolectric 对此进行测试。当然doThing() 会立即返回,我需要先给线程一个运行的机会
ShadowApplication.getInstance().getNextStartedService()
如何等待线程运行?
我试过了:
Robolectric.flushForegroundThreadScheduler();
Robolectric.flushBackgroundThreadScheduler();
两者都没有达到预期的效果:它们都在我的 Intent 发送之前返回。
目前我已经通过在我的测试中加入睡眠来解决它:
Thread.sleep(10);
它确实成功了,但它显然很可怕 - 这是一个等待让我悲伤的比赛条件。
【问题讨论】:
-
为什么要使用 Thread 类而不是像 AsyncTask 类这样的包装器? Robolectric 已经有一种机制可以在使用 AsyncTask 时避免并行代码执行。
Robolectric.flushBackgroundThreadScheduler()只能在您使用容易被 AsyncTask 等 robolectric 遮蔽的机制时产生效果。 -
因为我需要传入大量参数(未在我的 sn-p 中显示)并且 Thread 实现对于我需要做的事情来说更简单......但是我认为你是对的,赢得 ShadowAsyncTask 的好处——这就是我所使用的。
标签: android multithreading robolectric