Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 关闭应用程序之前关闭文件_Android_File - Fatal编程技术网

Android 关闭应用程序之前关闭文件

Android 关闭应用程序之前关闭文件,android,file,Android,File,我的应用程序中有一个选项,可以在运行时将数据保存到文件中。 它通过选中isChecked值来使用复选框: if (cb_saveToFile.isChecked()) saveTofile(); else closeTheFile(); 因为有时用户忘记取消选中复选框(文件未关闭,因此数据未保存),所以我希望在应用程序关闭时自动关闭文件(仅由用户通过任务管理器关闭) 我试图重写onDestroy方法,但没有帮助: @Override protected void onDestroy

我的应用程序中有一个选项,可以在运行时将数据保存到文件中。 它通过选中
isChecked
值来使用复选框:

if (cb_saveToFile.isChecked())
   saveTofile();
else
   closeTheFile();
因为有时用户忘记取消选中复选框(文件未关闭,因此数据未保存),所以我希望在应用程序关闭时自动关闭文件(仅由用户通过任务管理器关闭)

我试图重写onDestroy方法,但没有帮助:

@Override
protected void onDestroy()
{
    if (mFile.saveToFile)
        closeTheFile();
}
所以问题是:当应用程序关闭时,如何关闭文件

编辑: 我正在创建一个文件:

public void createFile() throws IOException {
    mFile = new File(fullFileName);
    mFile.createNewFile();
    fOut = new FileOutputStream(mFile);
    myOutWriter = new OutputStreamWriter(fOut);
}
并使用以下方法附加行:

public void addToFile (String data, Boolean enter) throws IOException {
    myOutWriter.append(data);
    if (enter) myOutWriter.append("\n");
}

我想在应用程序关闭时关闭文件(
myOutWriter.close()
&
fOut.close()
),而不仅仅是当用户单击复选框停止保存时)

我知道当其他操作发生时,您的方法工作得很好,所以问题在于调用此方法的部分

你想做的事,必须放在你的位置上

您必须使用相同的方法重写,仅当应用程序将被终止时:

onPause()

活动进入后台,但尚未(尚未)终止时,作为活动生命周期的一部分调用。onResume()的对应项

onDestroy()

在销毁活动之前执行任何最终清理。这可能是因为活动正在完成(有人对其调用finish(),或者是因为系统正在临时销毁活动的此实例以节省空间。您可以使用isFinishing()方法区分这两种情况


对于打开的文件,您的确切意思是什么?文件对象不保持打开或关闭状态。您的意思是有一个打开的OutputStream或指向文件的InputStream?您是否也尝试过使用方法closeTheFile()在onStop或onPause中?除非您有大量数据要连续写入文件,否则我建议您在不需要的任何时候关闭文件it@njzk2我不想关闭该文件,因为我正在继续保存后台,而应用程序正在最小化。添加
myOutWriter.flush()
在您的addToFile功能中感谢您的回答,但我不能使用
OnPause
,因为它在应用程序最小化时也能工作,而不仅仅是在任务管理器关闭时。(因此,当用户返回应用程序时,或者如果用户希望在应用程序处于后台时保留数据,我会遇到问题)
@Override
protected void onPause()
{
    if (mFile.saveToFile)
        closeTheFile();
}