【问题标题】:Communication between remote service and activity android远程服务和活动android之间的通信
【发布时间】:2011-08-11 08:54:40
【问题描述】:

我有一个Activity 和几个远程服务,即使 Android 应用程序没有运行,它们也应该运行。我需要这些服务来监听主要ActivitySharedPreferences 的变化(当它正在运行时),但是我该怎么做呢?

BroadcastReceiver?工控机通讯?没有把握.. 你能帮我一下吗?

非常感谢, 手动。

【问题讨论】:

    标签: android service android-activity listener sharedpreferences


    【解决方案1】:

    我有一个 Activity 和几个远程服务,即使 Android 应用没有运行,它们也应该运行。

    首先,您首先不需要“几个远程服务”。最多,您需要几个不是远程的服务。远程与“即使 Android 应用程序没有运行也应该运行”完全无关。这样会浪费大量内存、CPU 和电池。

    其次,由于用户和操作系统都不希望“即使 Android 应用程序没有运行”的“几个”服务“运行”,请尝试将它们合并到一个服务中,并且只有当它主动提供时才具有该服务对用户的价值。例如,观察时钟滴答声主动向用户传递价值 - 为此使用 AlarmManager

    我需要服务来监听主 Activity 的 SharedPreferences 的变化(当它正在运行时),但我该怎么做呢?

    使它们不再是远程服务,然后让服务向SharedPreferences 注册OnSharedPreferenceChangeListener 以了解偏好更改。

    【讨论】:

    • 首先,非常感谢;很好的答案,因为它让我知道我可能有一些理论上的错误概念,因为我认为 Android 中的远程服务是那些即使应用程序没有运行也可以运行的服务,而本地服务以某种方式“附加”到应用程序,这意味着如果后者被杀死或关闭,本地服务将停止运行;是这样吗?
    • 如果用户使用任务杀手或设置应用程序,他们将杀死所有远程或其他服务。除此之外,以startService() 开头的服务将一直运行,直到有人调用stopService() 或该服务调用stopSelf()。请记住,由于开发人员泄露服务,Android 越来越积极地主动关闭服务,无需用户干预。
    • 你不应该使用远程服务。您应该使用AlarmManagerIntentService,其中AlarmManager 会根据需要(例如,每24 小时)唤醒以完成工作。 IntentService 将在后台线程(您需要)上完成这项工作,并在工作完成后自动关闭。请记住,“短信”没有记录和支持的 API。
    • @noloman:您没有“一个Service 文件中的多项服务”。您在一个 Java 源代码文件中有一个 Service 类。它恰好服务于几个角色,通常通过检查传入的IntentsonStartCommand()(如果需要,onBind())来确定要做什么。您可以使用自定义操作字符串或附加项来指示您要执行的操作。
    • @noloman:这取决于。如果您使用的是_WAKEUP 警报,那么,是的,您需要使用BroadcastReceiver,也许与我的WakefulIntentService 结合使用,这样设备在您尝试工作时不会重新进入睡眠状态。如果您没有使用_WAKEUP 警报,那么您可以只使用getService() PendingIntent 向您的IntentService 发送命令,而无需BroadcastReceiver 中间人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    相关资源
    最近更新 更多