【问题标题】:Fileobserver in service during standbyFileobserver 在待机期间处于服务状态
【发布时间】:2013-06-08 11:34:21
【问题描述】:

我的 Android FileObserver 有问题。

我有一个后台服务正在运行(返回 START_STICKY),它引用了两个 FileObserver。 一切正常,直到设备设置为睡眠模式,据我所知,这将停止服务。

  1. 有谁知道当设备进入睡眠模式时 Service/FileObserver 究竟会发生什么?

  2. 服务能否在冻结前得到通知,以便我可以保存观察到的文件夹的文件列表,并在设备再次唤醒时将其与新列表进行比较?

我不想使用唤醒锁,因为它会影响电池寿命。

  1. 当我重新打开屏幕时,如果在我的服务设置为睡眠状态时发生的文件夹更改,是否会触发 FileObserver 事件?

这无法真正测试它,因为 USB 调试使设备保持唤醒状态。

感谢您的帮助!

【问题讨论】:

    标签: android service wakelock standby fileobserver


    【解决方案1】:

    据我所知,在设备设置为睡眠模式之前一切正常,这将停止服务

    不,它会停止 CPU。

    有谁知道当设备进入睡眠模式时 Service/FileObserver 究竟会发生什么?

    CPU 已停止。停止的 CPU 不会执行指令。这让人想起将您的开发计算机置于挂起模式。

    (细节要复杂得多,但通常与 SDK 级别无关,恕我直言)

    服务能否在冻结前得到通知,以便我可以保存所观察文件夹的文件列表,并在设备再次唤醒时将其与新列表进行比较?

    没有。

    当我重新打开屏幕时,我的服务设置为睡眠状态时发生的文件夹更改是否会触发 FileObserver 事件?

    我没试过。

    这无法真正测试它,因为 USB 调试会使设备保持唤醒状态。

    然后拔下 USB 数据线。使用Log 语句记录您希望监控的结果。测试结束后插入 USB 数据线以检查 LogCat 并查看您的日志。

    一般来说,您的整体解决方案(持续运行的服务)是对用户不利的。当用户使用任务杀手和强制停止按钮攻击您时,请不要抱怨。

    【讨论】:

    • 我知道持续运行的服务并不是很好,但它对于应用程序的运行至关重要。该服务仅引用两个 FileObserver,因此对电池寿命的影响很小甚至没有。你知道如何在 CPU 处于深度睡眠状态时获取我的观察者错过的新文件吗?
    • @user2226184:“我知道持续运行的服务并不是很好,但它对于应用程序的运行至关重要”——欢迎您提出意见。欢迎用户和我加入我们的网站。 “你知道如何在 CPU 处于深度睡眠状态时获取我的观察者遗漏的新文件吗?” ——你有什么证据表明你遗漏了什么?如果 CPU 停止,其他进程也没有在运行,因此它们无法操作文件。
    • 该应用程序的目的是监视文件夹并同步更改。该服务可以在应用程序设置中轻松禁用。很好,用户报告说设备处于待机状态时同步丢失了文件,我想我必须进一步调查这个问题。