Android 支持生成基线配置文件以提高性能。通过使用微基准与 UI 交互以在屏幕上显示某些内容。
此处的文档:https://developer.android.com/topic/performance/benchmarking/macrobenchmark-overview
https://developer.android.com/topic/performance/baselineprofiles/create-baselineprofile
但是通过使用功能
startActivityAndAwait
我只能打开登录屏幕,所以我无法在私人屏幕(登录屏幕)上进行交互。我使用 firebase auth
作为登录功能。
@LargeTest
@RunWith(AndroidJUnit4::class)
class SampleStartupBenchmark {
@get:Rule
val benchmarkRule = MacrobenchmarkRule()
@Test
fun startup() = benchmarkRule.measureRepeated(
packageName = TARGET_PACKAGE,
metrics = listOf(StartupTimingMetric()),
iterations = DEFAULT_ITERATIONS,
setupBlock = {
// Press home button before each run to ensure the starting activity isn't visible.
pressHome()
}
) {
// starts default launch activity
startActivityAndWait()
}
}
问题是如何与私人屏幕交互来生成期望的
baseline profile
文件?
不确定其他方法,但我必须有一个登录步骤。
fun MacrobenchmarkScope.startBenchmark() {
pressHome()
startActivityAndWait()
loginByPhone()
// After login, do another steps
}
fun MacrobenchmarkScope.loginByPhone() {
waitAndClickElement("phoneLoginButton")
setTextFieldValue("phoneNumberTextField", "1222223333")
// Send OPT Next button
waitAndClickElement("sendOTPButton")
setTextFieldValue("smsVerifyTextField", "123456")
// SMS verify Next button
waitAndClickElement("verifyOTPButton")
}
fun MacrobenchmarkScope.waitAndClickElement(res: String) {
val btnSelector = By.res(res)
device.wait(Until.hasObject(btnSelector), 5000)
val buttonObject = device.findObject(btnSelector)
if (buttonObject == null) {
Log.e("waitAndClickElement", "error at res=$res")
}
buttonObject.click()
}
fun MacrobenchmarkScope.setTextFieldValue(res: String, value: String) {
val textFieldSelector = By.res(res)
device.wait(Until.hasObject(textFieldSelector), 5_500)
val textFieldObject = device.findObject(textFieldSelector)
if (textFieldObject == null) {
Log.e("setTextFieldValue", "error at res=$res")
}
textFieldObject.text = value
}
希望这对某人有帮助!