假设我在SD卡上做了很多工作(比如CRC检查,下载,或者你能想到的任何东西)。事实证明,如果用户在应用程序运行期间安装了SD卡(或将其删除),则应用程序将自动被操作系统杀死而不会发出任何警告。
我想避免它,而不是退出。相反,我想停止工作并尽可能恢复(或做其他事情,只是不被杀)。
所以,简而言之,我的问题就像标题所说:在安装SD卡时如何避免使用SD卡时我的应用程序被杀?
我尝试了以下内容:
捕获所有异常。由于该应用程序被简单杀死,因此无效。
通过broadcastReceiver听取安装的意图。由于应用程序在捕获意图之前被杀死,因此无效。
检查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卡?),但这不是问题所在。