我正在调查android的View遍历和测量缓存的行为, 使用AOSP源代码和模拟器。
我想从每个函数发出调试日志消息 View.measure(),View.layout(),View.draw(), 来自调用它们的所有过程。
听起来很直白,对吧?但我还没有找到一种可靠的机制。
我尝试了什么:
标准日志记录机制:java.util.Log(以及使用logcat查看)。
失败:当邮件太多时,会随机丢弃邮件。
创建并附加到目录中的文件 Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)。
失败:这仅适用于某些进程(具有WRITE_EXTERNAL_STORAGE的进程) 许可,大概是)。
在目录view.getContext()。getCacheDir()中创建并附加到文件。
失败:调用getCacheDir()在system_process中失败,其中: “java.lang.RuntimeException:找不到包android的数据目录”。
创建并附加到目录view.getContext()中的文件.getExternalCacheDir()。
失败:这似乎适用于除system_process之外的所有进程, 其中getExternalCacheDir()返回/ storage / emulated / 0 / Android / data / android / cache, 但是尝试写入那里的文件会产生AccessDeniedException。
创建并附加到目录view.getContext()中的文件.getExternalFilesDir(null)。
失败:与(4)相同的结果,除了目录名以“files”结尾而不是“cache”。
创建并附加到/ data / local / tmp中的文件。
失败:在所有进程中都提供AccessDeniedException。
我该如何记录?
我对以下任何一行的具体解决方案感兴趣:
答案 0 :(得分:0)
我找到了以下目录,每个进程显然可以创建文件并写入;因此,让每个进程在相应的目录中为其日志记录/跟踪创建一个文件。 显然有两种情况必须完全分开处理。
注意:上面列出的字符串文字是我在AOSP源代码构建的仿真器上观察到的每个函数的回归;我不认为对它们进行硬编码是安全的。