知道为什么将 HOME 键发送到在 Instrumentation 下运行的应用程序没有任何作用吗?
import android.app.Instrumentation;
import android.view.KeyEvent;
public class MyInstrumentation extends Instrumentation {
public void sendKeys() {
// Works reliably
this.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
// Does nothing, nothing is printed to logcat
this.sendKeyDownUpSync(KeyEvent.KEYCODE_HOME);
}
}
这在使用Robotium时是一样的以及使用 Instrumentation 时直接地。该行为在模拟器和非根设备上是相同的。
最佳答案
home 键在 instrumentation 中不起作用,即使它起作用也会让你处于一个不太有利的位置。 Android Instrumentation 只能检测它自己的进程,这意味着一旦它被发送出去,您将无法返回到您的应用程序,并且可能更糟糕的是它具有轻微的不确定性,因为如果 Android 感觉如此,它可以关闭您的进程这会导致您的测试结束。
虽然这对您没有多大用处,是吗?我怀疑您正在尝试测试与可以看到的 Activity 生命周期有关的事情 here .这可以通过仪器进行测试,但不能以您希望的简单方式进行测试。如果您查看检测类 (here) 的 API 文档,您会看到大量以 callActivityXXX(Activity activity) 形式存在的有用方法,其中 XXX 与您要执行的生命周期事件匹配。
使用这些方法比在主页重新启动要困难一些,我想您会喜欢,但它允许您将测试分解到较低级别,以确保您的应用程序在每个阶段都做正确的事情,这将使随着时间的推移它会变得更加健壮(比如测试它在 onPause 时保存其状态并在 onResume 时再次正确加载它)。
使用仪器进行测试的下一个最简单的方法取决于您是否使用模拟器,如果这只是要在模拟器上运行,您可以使用方向命令:
solo.setActivityOrientation(Solo.LANDSCAPE);
solo.setActivityOrientation(Solo.PORTRAINT);
这将导致您的 Activity 被销毁并恢复测试 Activity 生命周期的一些但不是所有状态。
关于Android Instrumentation 主页按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25184160/