3

假设我在 SD 卡上有繁重的工作(比如 CRC 检查、下载或任何你能想到的)。事实证明,如果用户在应用程序运行期间挂载 SD 卡(或移除它),应用程序将自动被操作系统杀死而不会发出任何警告。

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

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

我尝试了以下方法:

  1. 捕获所有异常。这不起作用,因为该应用程序被简单地杀死了。

  2. 通过广播接收器收听安装的意图。没有工作,因为应用程序在捕捉到意图之前就被杀死了。

  3. 检查sd卡的状态。这不起作用,因为可以在检查和写入之间完成安装。

我也许可以创建一个新服务来处理与 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 卡?),但这不是这里的问题。

4

0 回答 0