【问题标题】:Android long-duration socket listenerAndroid 长时间套接字侦听器
【发布时间】:2011-06-05 04:21:53
【问题描述】:

本质上,我的公司已经开展了一个项目,用运行 Android 的库存智能手机替换部分寻呼机。只要他们登录,设备就应该在特定的套接字上侦听以接收来自服务器的“页面”。我幼稚的实现是创建一个前台服务,它 1) 启动了一个监听线程,并且 2) 持有一个 PARTIAL_WAKE_LOCK。

这可以正常工作,除非设备长时间不活动,超过 1 小时。然后,操作系统似乎关闭了我的应用程序的进程,可以理解地认为它没有被使用。

我完全理解他们这样做的原因,但我想知道我是否能以某种方式绕过这个限制。有没有办法向 Android 发出信号,表明我的进程真的足够重要以保持活动/设备唤醒?我在这个项目中同时学习了 Java 和 Android API,因此我的知识有很多领域是不完整的。

如果做不到这一点,鉴于我的业务需求描述,您会如何建议实现此功能?当用户登录到我们的定制应用时,设备应该一直在监听。

感谢大家阅读这个问题。

【问题讨论】:

    标签: android


    【解决方案1】:

    如果您使用 Service.startForground(),操作系统不会终止您的进程。这就是音乐播放之类的用途,您不希望这些东西在一段时间后被杀死。

    也就是说,对于这种事情,您通常不需要将服务置于前台——当系统确实因为它一直闲置或需要内存而终止您的进程时,它仍然知道服务想要保留running so 将在此之后不久重新启动服务。这就是 Google 自己的服务的工作方式,他们有一个运行后台服务的 .apk,该服务保持与 Google 服务的网络连接开放,该服务会在应该完成有趣的事情时报告回来,例如同步新电子邮件、检索和交付 C2DM意图等

    此外,您应该在所有时间都持有唤醒锁。您会耗尽电池电量,尤其是在某些设备上,例如配备三星蜂鸟处理器的设备。正确的做法是让插座保持打开状态,让设备进入睡眠状态。如果数据被传递到套接字,CPU 将唤醒以传递该数据,此时您应该在需要读取和处理数据时获取部分唤醒锁。

    【讨论】:

    • 衷心感谢您澄清了我的一些误解。我会做出这些改变。
    【解决方案2】:

    你所描述的听起来像是 Android Cloud to Device Messaging Framework 的工作。

    目前尚未完全开放,但该页面上有一个注册链接。我注册并在申请后 20 分钟内被接受。值得一看 IMO。

    【讨论】:

      猜你喜欢
      • 2017-09-03
      • 1970-01-01
      • 1970-01-01
      • 2012-10-16
      • 1970-01-01
      • 1970-01-01
      • 2014-05-26
      • 1970-01-01
      • 2011-12-10
      相关资源
      最近更新 更多