Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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 应用程序在onStop()完成之前终止_Android_Android Intent_Android Activity_Android Service_Android Lifecycle - Fatal编程技术网

Android 应用程序在onStop()完成之前终止

Android 应用程序在onStop()完成之前终止,android,android-intent,android-activity,android-service,android-lifecycle,Android,Android Intent,Android Activity,Android Service,Android Lifecycle,我的应用程序中有一个逻辑,因此当OnStop()发生时,我会将一个文件保存到存储器中。但是,如果文件很大,我通过从“最近”选项卡中滑动来关闭应用程序,则在保存文件之前,我的应用程序将关闭。所以它打开文件,然后应用程序死亡,文件保持为空。 这是正常的行为还是我手机上的任务杀手太过分了?我应该创建一个服务来保存文件吗 示例代码: @覆盖 公共void onStop(){ try(FileWriter=newfilewriter(路径)){ 如果(veryLargeFile==null){ 返回; }

我的应用程序中有一个逻辑,因此当OnStop()发生时,我会将一个文件保存到存储器中。但是,如果文件很大,我通过从“最近”选项卡中滑动来关闭应用程序,则在保存文件之前,我的应用程序将关闭。所以它打开文件,然后应用程序死亡,文件保持为空。 这是正常的行为还是我手机上的任务杀手太过分了?我应该创建一个服务来保存文件吗

示例代码:

@覆盖
公共void onStop(){
try(FileWriter=newfilewriter(路径)){
如果(veryLargeFile==null){
返回;
}
字符串s=veryLargeFile.toString();
Log.d(标记“显示此消息”);
作者:写;
Log.d(标记“未显示此消息”);
writer.flush();
}catch(IOException ex){}
super.onStop();
}
例2:

@覆盖
公共无效暂停(){
try(FileWriter=newfilewriter(路径)){
如果(veryLargeFile==null){
返回;
}
字符串s=veryLargeFile.toString();
Log.d(标记“显示此消息”);
作者:写;
Log.d(标记“未显示此消息”);
writer.flush();
}捕获(例外情况除外){
Log.d(标记“未显示此消息”);
}
super.onPause();
}

这是有道理的,我假定文件保存将异步进行,因此您无法保证它会在应用程序完全被拆除之前完成

正如评论中的一些人已经指出的那样,
WorkManager
可能是您在这里的最佳解决方案,它能够将异步任务推迟到系统来管理,因此即使您的应用程序完成,也能够运行

这里有一些很好的文档:


编辑

如果您尝试运行的代码是同步的,那么由于生命周期方法(如描述)是“不可修改的”,因此它应该仍然能够在
onStop
(post Honeycomb)或
onPause
期间完成

但是,如果您的应用程序在完成时被强制停止或崩溃,并且如生命周期文档所述,这仍然不能保证:

请记住,在极端内存压力下,系统可能随时终止应用程序进程


因此,我认为这是特定设备上的内存管理问题,导致应用程序过早终止。如果是这样的话,我会考虑使用一个更好的持久化方法,无论是在固定的时间间隔还是在应用程序的前景时间,如果它是必需的。< /P>如果我把我的保存代码放在OnPAUSEY()中,同样的行为是的,前景可以使用一个工作管理器来解决你的问题。在后台工作,并可以保存文件与应用程序KieldEfft WorkManager或地面服务将有助于在这种情况下,你能解释一下为什么我的应用程序在我的代码中被撕裂了吗?我有FileWriter,应用程序以write()方法终止。我不知道它是否是异步的,但在那之后我有了flush(),它还没有到达。这很有趣,
FileWriter
在主线程上运行。据我所知,让我做一些进一步的研究,然后再与您联系!不管我是否写文件写在代码> OnStutter()/<代码>,或者在<代码> OnPAUSEE()/<代码> @ GAMARJOPA,“你能解释一下为什么我的应用程序在我的代码中间被拆掉吗?”这就是系统的作用。我回答了一个问题,问了一个非常类似的问题。我不知道我是否认为这是正确的,如果你看这里是说,除了发生崩溃等情况外,
onStop
是不可杀死的。