在FileObserver的onEvent中长时间运行

时间:2016-01-07 21:36:35

标签: android android-service android-intentservice fileobserver

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

2 个答案:

答案 0 :(得分:1)

  

我的onEvent是否继续完成它的工作?

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

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

如果您希望工作能够快速发生 - 例如,在一秒钟之内 - 您应该能够将工作保持在原地。

但是,如果您正在进行的工作更为充实,我会考虑让服务完成工作。根据{{​​3}},虽然FileObserver不应位于IntentService,但FileObserver触发的工作可能是。 onEvent()会致电startService()告诉服务部门继续开展工作。服务是您正在代表用户积极开展工作的操作系统的信号,因此您的流程更有可能停留一段时间。

答案 1 :(得分:0)

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

FileObserver.onEvent documentation

  

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

因此,您唯一需要关注的是您在onEvent中究竟做了什么。例如,如果您要更新用户界面或与Activity方法中的Fragment / onEvent进行互动,那么如果Activity消失,可能会导致崩溃。

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

Service documentation

  

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

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