Java 在Android OS 4.2.2中,当应用程序从多任务窗口关闭时,保存在设备内部内存中的文件将被清除

Java 在Android OS 4.2.2中,当应用程序从多任务窗口关闭时,保存在设备内部内存中的文件将被清除,java,android,eclipse,Java,Android,Eclipse,我们的应用程序使用Context.getDir(foldername,Context.MODE_READABLE,Context.MODE_writeable)将应用程序数据保存到内存中。当应用程序从多任务窗口关闭时,应用程序数据在除Android三星Galaxy Nexus 4.2.2和Google Nexus 4.2.2之外的所有平台上都能正常工作,方法是将应用程序从当前运行的应用程序列表中刷出。如果应用程序正常退出,请按back,back。。按钮应用程序数据不会受到影响。 我们在HTC O

我们的应用程序使用Context.getDir(foldername,Context.MODE_READABLE,Context.MODE_writeable)将应用程序数据保存到内存中。当应用程序从多任务窗口关闭时,应用程序数据在除Android三星Galaxy Nexus 4.2.2和Google Nexus 4.2.2之外的所有平台上都能正常工作,方法是将应用程序从当前运行的应用程序列表中刷出。如果应用程序正常退出,请按back,back。。按钮应用程序数据不会受到影响。 我们在HTC One 4.0.3上尝试了相同的步骤,但当应用程序从多任务应用程序运行视图的当前运行列表中删除时,问题不可再现,应用程序数据也无法清除。我已经调试了很多,我找不到任何问题的代码。所有文件流都已正确关闭。此外,当我们在开发者选项“后台进程限制”下设置以下设置为“无后台进程”时,三星Galaxy Nexus 4.2.2和谷歌Nexus 4.2.2上的应用程序数据不会被清除。 如果我们将后台进程限制设置回标准限制,并从设备主屏幕上的多任务应用程序视图关闭应用程序,应用程序数据将被清除,因此用户的所有信息都将被清除。 我们的应用程序有多个活动,当从启动器活动中按Home按钮将应用程序发送到后台,然后从多任务窗口视图关闭应用程序时,应用程序数据不会清除,并且该问题在三星Galaxy Nexus 4.2.2和谷歌Nexus 4.2.2上不可再现。 但是,当应用程序从启动程序活动转移到应用程序的其他活动,然后通过按下Home按钮,然后从设备主屏幕的多任务窗口关闭应用程序,将应用程序发送到后台时,使用Context.getDir(foldername,Context.MODE|READABLE | Context.MODE|WRITABLE)保存的文件正在被清除。 我还试图在Android Emulator 4.2.2上重现这个问题,但它不可重现,而且工作得很好。
我不知道为什么操作系统会清除内存文件,它与限制后台进程有什么关系,因为我们的应用程序在没有后台进程的情况下工作得很好,但如果标准限制是所有设备中的出厂设置,则会清除该限制。

考虑使用adb外壳中的run as和应用程序的调试版本(或模拟器中的DDMS)来监视实际文件。重要的问题是平台是否正在清除该文件,或者您的应用程序在尝试更新文件时是否处于异常状态。使用最新的操作系统,您无法在内存中看到文件。我通过在应用程序被多任务窗口终止之前打印文件inputstream available size进行调试。在从多任务窗口关闭应用程序之前,文件inputstream的可用大小约为4000,从多任务窗口关闭应用程序之后,重新启动应用程序之后,文件inputstream的可用大小将更改为56,因此在android os 4.0.3中遵循这些步骤时,文件中保存的所有信息都将被清除,没有问题,即使我们将限制后台进程从标准更改为设备设置开发者选项中的1个进程,在4.2.2中也没有问题。在最新的android版本中,run-as仍然可以访问调试apk的私有文件。感谢Chris,我在4.2.2 emulator上进行了验证,该问题是不可重现的,从多任务应用程序窗口终止应用程序后,文件大小保持不变,可在三星Galaxy Nexus 4.2.2上复制。和谷歌Nexus4.2.2手机