当我尝试在我的Xamarin / Android应用程序中写入文本文件时,我间歇性地收到太多打开文件异常。我明白这是因为每个Android应用程序都有它可以打开的文件数量限制,显然我的应用程序在某些情况下超过了它。因此,我必须离开一些文件打开/没有妥善处置他们的地方。我想知道我是否可以编程列出我的应用程序在任何给定时间打开的文件?显然,操作系统知道这一点,有可能从我的应用程序中做到这一点吗?这将帮助我找到问题所在。
感谢fiddler,这是我解决它的方法,以防将来其他人需要这样做(在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>();
}
1条答案
按热度按时间8mmmxcuj1#
您可以在ADB shell中使用Unix lsof命令。
1.启动shell:
$
adb shell
1.查找应用的进程ID:
shell@android:/$
ps | grep <packagename>
1.列出应用打开的文件:
shell@android:/$
lsof -p <pid>