在我开始提问之前,我想先写下这个问题:我知道这是一个不好意思强迫服务永远运行......我根本就不在乎。
此应用程序不供消费者使用。它不在应用程序商店。这仅供我使用。
好吧,我有这个未使用的HTC Sensation运行4.0.3(ICS),我已经自愿前往当地剧院完成任务。任务是在节目中需要它的时候响铃。我们不想要一张SIM卡,因为有人可能会在节目播放期间不小心打电话给电话。
所以我创建了一个虚假的手机应用程序,它通过TCP从我设置的服务器接收信号,以便通过LAN向设备发送信号。现在我让侦听器在服务中的无限循环中运行。但是,我仍然遇到无法响应TCP信号的服务。
我真的很感激,如果一些Android大师可以给我一些提示/技巧,使这项服务尽可能可靠,好/坏编码技术除了我想尽一切可能使这项服务无法收回。这款手机现在只有一个工作,那就是一直在监听收到的信息,无论如何。
到目前为止我所做的事情:
创建了一个服务(并从该服务启动了一个单独的线程) 使用了startForeground(id,notification); 激活了DeviceAdmin并创建了一个唤醒锁
你们能想到的其他任何东西?
答案 0 :(得分:2)
无法确保Android永远不会终止服务。如果你把它作为前台服务,它会减少几率,但是你无法保证它。
答案 1 :(得分:2)
我想到的第一个想法是设置一个AlarmManager,每隔5秒检查一次该服务是否正在运行。 This describes a method to see whether a service is running。 如果服务没有运行,您可以重新启动它。
使用它和startForeground()方法可能有效。
亲切的问候
答案 2 :(得分:0)
基于服务javadoc的这句话......
在与服务相同的流程中运行的其他应用程序组件(例如活动)当然可以提高整个流程的重要性,而不仅仅是服务本身的重要性。
...如果您将启动服务的活动留在前台,这几乎可以保证服务不会被停止[我发布评论开始表明这个想法可能已被切断]
要添加其他级别的可靠性,请使用此文档作为指南,在您的活动中保持唤醒锁定: https://developer.android.com/reference/android/os/PowerManager.WakeLock.html
示例代码:
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
wl.acquire();
// ..screen will stay on during this section..
wl.release();