要解决Android单元测试中活动在超时或延迟后启动而不起作用的问题,可以使用CountDownLatch来等待活动启动完成。以下是一个示例代码:
import androidx.test.core.app.ActivityScenario;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
@RunWith(AndroidJUnit4.class)
public class MyActivityTest {
@Test
public void testDelayedActivityLaunch() throws InterruptedException {
// 创建一个CountDownLatch来等待活动启动完成
CountDownLatch latch = new CountDownLatch(1);
// 启动活动
ActivityScenario.launch(MyActivity.class).onActivity(activity -> {
// 在活动启动完成后调用CountDownLatch的countDown()方法
latch.countDown();
});
// 等待活动启动完成,最多等待5秒钟
boolean isActivityLaunched = latch.await(5, TimeUnit.SECONDS);
// 断言活动是否成功启动
assertTrue(isActivityLaunched);
}
}
在这个示例中,我们使用了CountDownLatch来等待活动启动完成。在ActivityScenario的onActivity回调中,调用CountDownLatch的countDown()方法来通知主线程活动已经启动完成。使用latch.await()方法来等待活动启动完成,最多等待5秒钟。
请注意,这里的MyActivity是你要测试的活动类名,你需要将它替换为你自己项目中的活动类名。