当我尝试在Xamarin / Android应用中写入文本文件时,我间歇性地打开太多打开文件异常。我知道这是因为每个Android应用程序都可以打开的文件数有限制,很明显,在某些情况下我的应用程序超出了它。因此,我必须将某些文件保持打开状态/不在某些地方正确处理它们。我想知道是否可以以编程方式列出我的应用程序在任何给定时间打开的文件吗?显然,操作系统知道这一点,是否可以从我的应用程序中做到这一点?这将帮助我发现问题。
多亏提琴手,这才是我解决问题的方式,以防万一其他人将来需要这样做(在C#/ Xamarin中):
private static List<string> m_commandData;
private static void GetOpenedFiles()
{
m_commandData = new List<string>();
RunCommand("lsof");
RunCommand("ps | grep TestNoFilesOpen");
}
private static void RunCommand(string command)
{
string data;
using (Java.Lang.Process process = Java.Lang.Runtime.GetRuntime().Exec(command))
{
Stream stream = process.InputStream;
StreamReader bodyReader = new StreamReader(stream);
data = bodyReader.ReadToEnd();
}
m_commandData.Add(data);
}
private static void WriteCommands()
{
for (int i = 0; i < m_commandData.Count; i++)
{
using (TextWriter tw = new StreamWriter(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath + "/NoFilesOpen/adb_" + i.ToString() + ".txt"))
{
tw.Write(m_commandData[i]);
tw.Close();
}
}
m_commandData = new List<string>();
}
您可以在ADB shell中使用Unix lsof命令。
1)启动shell:
$ adb shell
2)查找您的应用的进程ID:
shell@android:/ $ ps | grep <packagename>
3)列出您的应用程序打开的文件:
shell@android:/ $ lsof <pid>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句