如何在使用即将安装的SD卡时避免app被杀?

时间:2012-06-19 08:32:15

标签: android crash android-sdcard mount kill-process

假设我在SD卡上做了很多工作(比如CRC检查,下载,或者你能想到的任何东西)。事实证明,如果用户在应用程序运行期间安装了SD卡(或将其删除),则应用程序将自动被操作系统杀死而不会发出任何警告。

我想避免它,而不是退出。相反,我想停止工作并尽可能恢复(或做其他事情,只是不被杀)。

所以,简而言之,我的问题就像标题所说:在安装SD卡时如何避免使用SD卡时我的应用程序被杀?

我尝试了以下内容:

  1. 捕获所有异常。由于该应用程序被简单杀死,因此无效。

  2. 通过broadcastReceiver听取安装的意图。由于应用程序在捕获意图之前被杀死,因此无效。

  3. 检查SD卡的状态。这是行不通的,因为可以在检查和书写之间进行安装。

  4. 我或许可以创建一个新服务来处理与SD卡相关的所有事情,并为其提供自己的流程,但这真的是解决方案吗?它会工作吗?没有其他办法可以解决这个问题吗?

    作为示例代码,您可以使用下面的代码。它只是为了解决问题:

    public void createExternalStoragePrivateFile()
    {
      final File file = new File(getExternalFilesDir(null), "DemoFile.jpg");
      try
      {
        final InputStream is = getResources().openRawResource(R.drawable.ic_launcher);
        final OutputStream os = new FileOutputStream(file);
        final byte[] data = new byte[is.available()];
        is.read(data);
        for (int i = 0; i < data.length; ++i)
        {
          os.write(data[i]);
          Log.d("DEBUG", "byte " + i + " out of " + (data.length + 1));
          // try to mount during this loop and avoid crashing/being killed
          Thread.sleep(100);
        }
        is.close();
        os.close();
       }
      catch (final IOException e)
      {
        Log.w("DEBUG", "Error writing " + file, e);
      }
      catch (final InterruptedException e)
      {
        e.printStackTrace();
      }
    }
    

    注意:当然我开发的应用程序安装在内部存储中。我知道安装在SD卡上的应用程序不会被杀死是没有意义的。当然,它也可能是一个有趣的问题(甚至可以避免安装SD卡?),但这不是问题所在。

0 个答案:

没有答案