簡體   English   中英

列出我的Android應用程序打開的所有文件

[英]List all files opened by my Android App

當我嘗試在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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM