ANR调用File.toURI()时

时间:2013-12-24 12:40:02

标签: java android

Google Play开发者控制台报告称File.toURI()方法导致ANR(应用程序未响应)错误:

at libcore.io.Posix.stat(Native Method)
at libcore.io.ForwardingOs.stat(ForwardingOs.java:131)
at java.io.File.isDirectory(File.java:529)
at java.io.File.getAbsoluteName(File.java:1104)
at java.io.File.toURI(File.java:1062)
at com.mypackage.myclass.<init>(SourceFile:1234)

是否有另一种方法在主线程上执行此操作(因为使用后台线程看起来有点矫枉过正)?

2 个答案:

答案 0 :(得分:0)

不建议直接在UI或主线程上执行任务。在您的情况下,请尝试 AsyncTask 。请查看here示例。

答案 1 :(得分:0)

如果文件路径已经是绝对路径,并且您已经知道文件是否是目录:

public static String toURI(File f, boolean isDirectory) {
    try {
        String sp = slashify(f.getPath(), isDirectory);
        if (sp.startsWith("//")) {
            sp = "//" + sp;
        }
        return new URI("file", null, sp, null);
    } 
    catch (URISyntaxException x) {
        throw new Error(x);         // Can't happen
    }
}

private static String slashify(String path, boolean isDirectory) {
    String p = path;
    if (File.separatorChar != '/')
        p = p.replace(File.separatorChar, '/');
    if (!p.startsWith("/"))
        p = "/" + p;
    if (!p.endsWith("/") && isDirectory)
        p = p + "/";
    return p;
}