Answers:
要回答您的问题:
不知道Dalvik在启动时不会失效的任何Android版本。也许我最初不知道最初的1.0版本经历了Eclair,Froyo,Gingerbread,Ice Cream Sandwich。您需要查看源代码树并将其重新设置为CupCake或Donut(分别为1.5和1.6)
详细原因:)
必须使用Wipe Cache的原因是因为所有apk(包括系统apk)都附加有dex文件,因此,当第一次启动ROM时,Android的Dalvik会遍历每个apk,然后解压缩并将其中的dex文件放入缓存中,/data/dalvik-cache
从而加快了应用本身的执行速度。
大多数ROM具有经过odex处理的apk,高速缓存作为外部文件捆绑在apk本身中。
许多自定义ROM修改器都会使用这些apks deodex'd,这意味着dex文件已被替换并重新打包,以使其更易于主题化/修改apk。
当您刷新自定义ROM且未清除缓存时,较新的自定义ROM的apk将附加一个不同的dex文件,当Dalvik遍历它们时,它将看到目录中找到的现有缓存dex文件,并且跳过它,然后在运行应用程序时,可以确保强制关闭或ANR(应用程序无响应)。
如果使用ClockWorkMod Recovery并选择了Wipe Data,则您本身并不会丢失数据,那么是的,所有与应用程序相关的设置都会被干净擦除-查找/data/app
。
因此,您可以擦除Wipe Cache而不擦除Wipe Data,有效完成的操作被放置在较新的apk中,并保留了设置。对于CyanogenMod夜间情况,这是很常见的情况,其中会刷新不稳定/正在测试的ROM版本,并通过缓存擦除保留设置。续航里程取决于从市场上下载的应用程序(设置可能会因版本变化而改变)。
为了获得最佳结果,明智的做法是同时执行“ 擦除数据”和“ 擦除缓存”以确保完整性,并且在应用程序本身内没有程序错误。
是的,这意味着启动时间会更慢,但它的初始启动时间为短暂。之后,它会更快启动。简而言之,通过CWM明确擦除缓存本身实际上有助于提高缓存速度,并确保不会混入先前版本的残留物(现在,在此阶段,我意识到您的问题,因此,公平地说,实际上并没有看到Android在刷新新ROM时在启动时未执行缓存本身的无效化。)
认真使用源卢克!:D
frameworks/base/core/java/com/android/internal/os/ZygoteInit.java
是每个apk运行时的启动代码。它与dalvik
目录树中的本机C代码进行交互,该目录树包含特定的芯片集指令,以解释apk到本机CPU指令集内的字节码。ARMv6几乎是ARMv5的黑客版本(这是Eclair之前的较早Android版本中的原始芯片组),因此您不会在Google的AOSP源代码中看到ARMv6。CyanogenMod将在其源代码中包含该ARMv6。
data/data
,但data\dalvik-cache
。可能只是系统的。