gpt4 book ai didi

android - 列出我的 Android App 打开的所有文件

转载 作者:搜寻专家 更新时间:2023-11-01 08:37:31 27 4
gpt4 key购买 nike

当我尝试在我的 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>();
}

最佳答案

您可以使用 Unix lsof命令在 ADB shell .

1) 启动外壳:

$ adb shell

2) 找到您的应用程序的进程 ID:

shell@android:/ $ ps | grep <packagename>

3) 列出您的应用打开的文件:

shell@android:/ $ lsof <pid>

关于android - 列出我的 Android App 打开的所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35557930/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com