Java ServiceTestRule:Can';t在未调用Looper.prepare()的线程内创建处理程序

Java ServiceTestRule:Can';t在未调用Looper.prepare()的线程内创建处理程序,java,android,unit-testing,android-service,android-instrumentation,Java,Android,Unit Testing,Android Service,Android Instrumentation,我创建了一个类来测试服务,它使用服务测试规则。尝试使用context.getSystemService(context.System\u Service\u NAME)检索系统服务对象时出现异常 异常的堆栈跟踪: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() at android.os.Handler.<init>(Handler.

我创建了一个类来测试
服务
,它使用
服务测试规则
。尝试使用
context.getSystemService(context.System\u Service\u NAME)
检索系统服务对象时出现异常

异常的堆栈跟踪:

java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.<init>(Handler.java:200)
at android.os.Handler.<init>(Handler.java:114)
at android.content.ClipboardManager$2.<init>(ClipboardManager.java:69)
at android.content.ClipboardManager.<init>(ClipboardManager.java:69)
at android.app.ContextImpl$11.createService(ContextImpl.java:405)
at android.app.ContextImpl$ServiceFetcher.getService(ContextImpl.java:297)
at android.app.ContextImpl.getSystemService(ContextImpl.java:1832)
at android.view.ContextThemeWrapper.getSystemService(ContextThemeWrapper.java:113)
at android.app.Activity.getSystemService(Activity.java:5003)

如何获取系统服务对象(管理器)?

当您试图从工作线程调用某个对象时,通常会出现此错误,而该对象是从主线程调用的。 对我有效的方法是在测试函数上声明一个
@UiThreadTest
注释,如下所示:

@Test
@UiThreadTest
public void shouldShowClipboardViewOnCopyText() {
    ...
}
@Test
@UiThreadTest
public void shouldShowClipboardViewOnCopyText() {
    ...
}