0

我有一个包含 FileObserver 实例的活动。我开始观看 onCreate 并停止观看 onDestroy 活动。那么如果 onEvent 正在执行一些操作并且活动被破坏(用户按下后退按钮)会发生什么?我的 onEvent 是否继续完成它正在做的事情?基本上我想知道 onEvent 是否应该启动服务或自己处理其业务。

4

2 回答 2

2

我的 onEvent 是否继续完成它正在做的事情?

至少简要地说,是的。FileObserver与特定组件的生命周期无关,例如Activity.

但是,一旦您的应用程序不再处于前台,您的进程可以随时终止,以便为其他应用程序释放系统 RAM。默认情况下,发生这种情况时,Android 不会关注您FileObserver及其处理。onEvent()

如果您希望工作能够快速完成——比如说,不到一秒钟——您应该能够将其保持在原处。

但是,如果您正在做的工作量更大,我会考虑让服务来完成这项工作。根据我们之前的讨论,虽然FileObserver不应该在 an 中IntentService,但由 the 触发的工作FileObserver可能是。onEvent()会打电话startService()告诉服务去做这项工作。服务是向操作系统发出的信号,表明您正在代表用户积极工作,因此您的进程更有可能停留更长时间。

于 2016-01-07T21:47:50.827 回答
0

除非应用程序停止,否则 onEvent 中的代码将继续运行。

FileObserver.onEvent 文档

此方法在特殊的 FileObserver 线程上调用。它独立于任何线程运行,因此请注意使用适当的同步!考虑使用post(Runnable)将事件处理工作转移到主线程以避免并发问题。

所以你唯一需要关心的是你到底在做什么onEvent。例如,如果您正在更新 UI 或与方法中的 / 交互,那么Activity如果消失,这可能会导致崩溃。FragmentonEventActivity

考虑到这一点,服务肯定会增加应用程序在您执行工作时不会终止的可能性。

服务文件

Android 系统仅在内存不足时才会强制停止服务,并且必须为具有用户焦点的活动恢复系统资源。如果服务绑定到具有用户焦点的活动,则它不太可能被杀死,如果服务被声明在前台运行(稍后讨论),那么它几乎永远不会被杀死。否则,如果服务已启动并且长时间运行,那么系统将随着时间的推移降低其在后台任务列表中的位置,并且该服务将变得非常容易被杀死 - 如果您的服务已启动,那么您必须将其设计为优雅地处理系统重新启动。如果系统终止您的服务,它会在资源再次可用时重新启动它...

所以底线是服务更有可能使您的应用程序保持活力。如果您打电话,事件更有可能发生,startForeground但在这种情况下,您需要愿意向用户显示通知。

于 2016-01-07T21:44:14.013 回答