问题描述
Android Emulator快照标志未按预期运行。我使用
创建了一个名为Mydevice的新avdlet myStylesheet = document.styleSheets[0];
const elementA = document.getElementsByClassName('element-a')[0];
let elementAWidth = window.getComputedStyle(elementA).getPropertyValue('width');
const calculateHalfWidth = (elementAWidth) => {
myStylesheet.insertRule('.halfWidth { width: ' + (parseInt(elementAWidth) / 2) + 'px; }',myStylesheet.cssRules.length);
}
calculateHalfWidth(elementAWidth);
// ================================================================================
// THE SCRIPT BELOW USES A ResizeObserver TO WATCH THE RESIZABLE .element-a DIV
// ================================================================================
const elementAObserver = new ResizeObserver(entries => {
for (let entry of entries) {
if (entry.contentRect.width !== elementAWidth) {
calculateHalfWidth(entry.contentRect.width);
}
}
});
elementAObserver.observe(elementA);
现在我使用
运行此avdbody {
font-family: sans-serif;
}
div.element {
float: left;
width: 200px;
height: 100px;
margin: 12px 3px;
text-align: center;
border: 1px solid rgb(0,0);
}
div.element h2 {
font-size: 18px;
}
div.element-a {
resize: horizontal;
overflow: auto;
}
div.element-b {
width: 300px;
}
div.halfWidth {
height: 40px;
margin: 0 auto;
border: 1px dashed rgb(255,0);
}
div.halfWidth h2 {
font-size: 14px;
}
仿真器成功启动后,我使用拍摄快照
<div class="element element-a">
<h2>Element A</h2>
<div class="halfWidth">
<h2>halfWidth</h2>
</div>
</div>
<div class="element element-b">
<h2>Element B</h2>
<div class="halfWidth">
<h2>halfWidth</h2>
</div>
</div>
成功创建了快照。
现在我停止使用运行的模拟器
tools/bin/avdmanager create avd --force --name Mydevice --abi google_apis/x86 --package 'system-images;android-29;google_apis;x86' --device "Nexus 6P" &
现在,我再次使用-read-only标志运行模拟器,并使用已保存的快照运行
sudo emulator/emulator -avd Mydevice -no-window -port 5554
但是-snapshot似乎被忽略了,因为仿真器仍然需要与启动相同的时间。
我还尝试删除了只读标志,但这没有帮助。
解决方法
-snapshot
的参数是快照标记名称,而不是路径。
首先,像这样列出快照:
emulator/emulator -avd mydevice -snapshot-list
将会产生这样的输出(到目前为止,我还没有弄清楚如何在不实际启动仿真器的情况下列出快照,但现在只需运行此命令后关闭仿真器即可):
ID TAG VM SIZE DATE VM CLOCK
-- snap_2020-12-03_13-31-29 90M 2020-12-03 13:31:29 01:11:57.073
-- default_boot 68M 2020-12-03 14:15:33 00:02:08.928
然后,使用“ TAG”列中的值之一启动仿真器,例如:
emulator/emulator -avd mydevice -snapshot snap_2020-12-03_13-31-29
对于Android Studio,AVD Manager中设备的“高级设置”还具有用于选择快照以启动设备的下拉菜单。
作为旁注,我发现从快照大幅度地启动仿真器映像可以改善其性能,至少在我的Linux机器上如此。使用快照标志时,仿真器的磁盘写入是正常的;如果没有快照标志,由于某种原因,仿真器本质上会不断地向磁盘写入数据,从而使所有内容缓慢进行爬网。老实说,我不知道为什么。