Android-如何在待机状态下(屏幕关闭)保持Infite循环在服务中运行?

Android-如何在待机状态下(屏幕关闭)保持Infite循环在服务中运行?,android,sockets,infinite-loop,standby,Android,Sockets,Infinite Loop,Standby,我有一个正在运行的服务,它打开一个端口并接收消息。它通过打开一个端口并在无限循环中侦听它来实现。当屏幕关闭几分钟后,我不再收到任何消息 现在,我试着通过叫醒来保持清醒。但这似乎不起作用,并消耗大量电池。因此,我如何保持infite循环运行,以及如何以最小的电池消耗实现它 这不是真正的代码,但这就是我如何在待机状态下保持清醒的方法 MyService{ ... public void startListening(){ new Thread(new Runnable(){ public vo

我有一个正在运行的服务,它打开一个端口并接收消息。它通过打开一个端口并在无限循环中侦听它来实现。当屏幕关闭几分钟后,我不再收到任何消息

现在,我试着通过叫醒来保持清醒。但这似乎不起作用,并消耗大量电池。因此,我如何保持infite循环运行,以及如何以最小的电池消耗实现它

这不是真正的代码,但这就是我如何在待机状态下保持清醒的方法

MyService{
...
public void startListening(){

new Thread(new Runnable(){

 public void run(){
 PowerManager mgr = (PowerManager)c.getSystemService(Context.POWER_SERVICE);
 final WakeLock wakeLock = mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "ListeningLock");

 new Thread(new Runnable(){

 public void run(){
   wakeLock.acquire()
   someClass.infiniteListeningLoop();
   wakeLock.release();
 }

 }).start();

 }).start();

}

}
更新


唤醒锁不是问题所在。我会定期发出通知,告知循环仍在运行,以及循环已经运行了多少次。所以问题似乎出在插座上。我捕获所有异常,但没有抛出任何异常。安卓可以在一段时间没有收到任何东西后关闭端口吗

出于好奇,为什么不使用GCM?GCM总是在监听,这样你就不用投票了。我会考虑的,但是我更希望没有一个第三方服务器。你当然需要使用WaelKoCK。假设您正在成功监听连接,那么您使用的是wifi,而不是移动网络。在Android上,如果您不积极使用wifi,wifi收音机通常会在一段时间后关闭,因此您可以尝试定期获取少量流量。当然,这种方法会浪费电池-因此建议使用GCM之类的东西,它使用您无法直接访问的技巧以提高能效。我使用wifi和移动网络,这取决于客户端连接到什么。到目前为止,这一切都很好。唯一的问题是,在一段时间没有收到包之后,套接字不再接收包。我猜Android关闭了这个端口,但我现在不确定到底是什么问题。