【问题标题】:Structure question over Local/Remote Services, Broadcast Receivers, and Intent Services本地/远程服务、广播接收器和意图服务的结构问题
【发布时间】:2010-12-25 23:58:17
【问题描述】:

我正在编写一个具有标准活动的 Android 应用程序,但还需要始终监控传入/传出的呼叫和文本。此外,该应用程序需要每天通知用户一次信息,而无需打开活动。它通知用户的信息存储在数据库中,因此无需与活动进行通信。我已经研究了一个星期,但仍然无法决定如何去做。我的直觉告诉我,我需要一个具有持续运行的广播接收器的远程服务,但我看到的每个远程服务示例都过于复杂。谁能帮助我更好地了解我需要采取哪些步骤?提前致谢。

【问题讨论】:

    标签: android android-intent android-service android-lifecycle


    【解决方案1】:

    我的直觉告诉我,我需要一个具有持续运行的广播接收器的远程服务

    嗯,不。我这么说是因为:

    • 只有一个应用程序,因此不需要“远程”服务
    • “具有持续运行的广播接收器的服务”是一个非常糟糕的主意,因为用户会用任务杀手攻击你,即使他们不这样做,Android 最终还是会终止你的服务,因为这是浪费空间

    使用在您的清单中注册的BroadcastReceivers 用于随时可能发生的广播,因为即使您的应用程序没有其他内容正在运行,它们也会获得控制权。使用IntentService 来完成BroadcastReceivers 所需的任何“繁重工作”,因为BroadcastReceiver 在主应用程序线程上获得控制(在onReceive() 中),因此应该尽可能少地做工作。此外,使用AlarmManager 发送BroadcastReceiver(或者,可能是您的IntentService)为您的每日一次活动发送Notification

    另外,请注意,您无法“监控...传出...文本”,而“监控...传入...文本”需要您使用未记录的能力安卓。虽然可能android.provider.Telephony 不会消失,但您只需要注意所涉及的风险。

    【讨论】: