2011-10-18 88 views
1

嗯,我在我的Android应用程序中遇到了一个陌生问题。Android应用程序在设备休眠时停止工作

我做了启动的服务报警,这样的事情:

public class ExecutaAcoes extends Service implements Runnable {  
protected static final String URL = "http://www.mysite.com.br" 
@Override 
public void onCreate() {   
Log.i("Teste","Service started"); 
    new Thread(this).start(); 
} 
@Override 
public void run() { 
try { 
    Log.i("Teste","Thread started");      
    HttpClient client = new DefaultHttpClient(); 
    HttpGet request = new HttpGet(URL); 
    HttpResponse response = client.execute(request); 
    HttpEntity entity = response.getEntity(); 
    if (entity != null) { 
       ... 
    } catch (Throwable e) { 
     Log.i("Teste","erro excepty: "+e.toString()); 
    } finally { 

}; 

所以,每30秒报警管理器启动该服务,它访问的网页www.mysite.com.br。此代码在模拟器中正常工作,但不在我的设备上。当电话睡眠(和屏幕中断)时,网页没有被访问,并且应用程序在catch(Throwable e)中返回错误:“java.net.UnknownHostException:主机未解析”或返回套接字错误。

奇怪的是,如果我按下设备上的任何按钮,并且屏幕亮起,应用程序将恢复正常工作并访问网站。 有谁知道如何解决这个问题?

感谢一些帮助 亚历山大

+1

你能告诉你如何请求这个警报吗? (无关:为什么你必须每隔30秒更新一次电话是否睡眠?这对电池寿命不利) –

回答

2

这是正常现象。当设备进入睡眠状态时,某些功能不可用。 AlarmManager保持CPU唤醒锁定,以便在警报关闭时执行您的onReceive()方法。请注意,这只会影响此方法:如果启动服务,此担保不会扩展到此服务。此外,它只会给你CPU唤醒锁定,这意味着CPU将运行,但不是屏幕和网络。

要从您的服务访问Wifi,您需要获取WifiManager.WifiLock。对于3G,屏幕和其他功能见PowerManager

此外,每30秒一直运行网络扫描将在几小时内耗尽电池 - 用户不会喜欢这样。重新考虑使用server push (with wifi lock)sync adapter

+0

谢谢你们,WifiManager.WifiLock工作得很好 – Alexandre

相关问题