【问题标题】:IllegalArgumentException in StatFs in WebViewCore internal threadWebViewCore 内部线程中的 StatFs 中的 IllegalArgumentException
【发布时间】:2013-01-25 15:45:56
【问题描述】:

Google play 在某些设备上报告了异常(全部是“其他”和一个“LG-E400”,因此可能是一些自定义的 android 版本)

例外是:

java.lang.IllegalArgumentException
at android.os.StatFs.native_setup(Native Method)
at android.os.StatFs.<init>(StatFs.java:32)
at android.webkit.CacheManager.init(CacheManager.java:199)
at android.webkit.BrowserFrame.<init>(BrowserFrame.java:210)
at android.webkit.WebViewCore.initialize(WebViewCore.java:201)
at android.webkit.WebViewCore.access$500(WebViewCore.java:54)
at android.webkit.WebViewCore$WebCoreThread$1.handleMessage(WebViewCore.java:631)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:653)
at java.lang.Thread.run(Thread.java:1019)

问题是我不能忽略这个异常,因为它在单独的线程中。 这个问题有什么解决办法吗? 或者我能用它做什么?

【问题讨论】:

  • 显然是操作系统问题。对我们来说,它只发生在 LG Optimus L3 和 LG-E405 上,所以你现在可以将它们列入黑名单。它们本质上是相同的设备。

标签: android multithreading exception


【解决方案1】:

很可能是设备操作系统错误。我对 AudioRecord 库有很多问题 - 它在 Yusu、Micromax、Alcatel 和其他低档设备等许多设备上的本地初始化中也失败了。它们在 GooglePlay 报告中都显示为“其他”。此外,我还发现一些Cyanogenmod ROM 在 AudioRecord 中存在错误 - 在我的 HTC One V 上,它工作正常,直到我刷新 CM10。 了解确切设备型号、logcats、mem 和其他有关这些设备上发生的情况的信息的一种好方法是使用一些高级崩溃报告工具,如 ACRA 在我收到报告说设备的制造商固件肯定有问题后,我将其列入了 GooglePlay 的黑名单。

【讨论】:

    【解决方案2】:

    您在 Statfs 构造函数中提供的路径不存在

      String path = "path to some directory";
    StatFs statFs = null;
    statFs = new StatFs(path);
    

    并且您必须在清单文件中具有外部存储权限

    【讨论】:

    • 如果File path指向现有目录中不存在的文件,使用path.getParent()传递目录。
    【解决方案3】:

    似乎某些固件与 StatFs 存在问题

    三星 Galaxy Stratosphere™ II (Verizon) SCH-I415, Android:4.1.2 也有类似问题 当我打电话时:

     StatFs statFs = null;
     statFs = new StatFs(Environment.getExternalStorageDirectory().getAbsolutePath());
    

    我遇到了异常:

     java.lang.IllegalArgumentException
     at android.os.StatFs.native_setup(Native Method)
     at android.os.StatFs.<init>(StatFs.java:32)
    

    【讨论】:

      【解决方案4】:

      我遇到了类似的问题,我的日志看起来像

      03-14 13:41:55.715: E/PayPalService(14037): Risk component failed to initialize, threw null
      03-14 13:41:56.295: E/(14037): statfs /storage/sdcard0 failed, errno: 13
      03-14 13:41:56.365: E/AndroidRuntime(14037): FATAL EXCEPTION: Thread-1219
      03-14 13:41:56.365: E/AndroidRuntime(14037): java.lang.IllegalArgumentException
      03-14 13:41:56.365: E/AndroidRuntime(14037): at android.os.StatFs.native_setup(Native Method)
      03-14 13:41:56.365: E/AndroidRuntime(14037): at android.os.StatFs.<init>(StatFs.java:32)
      

      我通过查看前两行发现了这个与 sd 卡有关的问题。然后我检查了设备设置,发现我已经检查了他们的选项 应用程序必须有权读取 sd 卡和我的应用程序正在安装的清单中没有 READ SD CARD 权限。所以可能这些事情是相关的,对我来说可能的解决方案是在清单中添加权限或取消选中该选项。希望它有助于进一步的研究。

      【讨论】:

        【解决方案5】:

        从 Lollipop 开始,Android 对访问外部 SD 卡设置了相当严格的限制。您可以使用:

            StatFs stat;
            try {
                stat = new StatFs(path);
            } catch (IllegalArgumentException e) {
                // Handle the failure gracefully or just throw(e)
            }
        

        解决错误。

        对于我的应用程序,我只是跳过不可用的目录,基本上将用户限制在内部存储中。这不是一个理想的解决方案,但不会崩溃的有限应用程序比会崩溃的应用程序要好。

        【讨论】:

        • 不。这与从我的代码中调用 new StatFs() 无关。这是关于从 android 代码调用的 new StatFs() 。它在 WebView 中单独调用。我不能在那里添加 try 块。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-04
        • 1970-01-01
        • 1970-01-01
        • 2011-11-05
        • 2012-03-05
        • 2016-05-21
        相关资源
        最近更新 更多