设备休眠时,Android应用停止工作

时间:2011-10-18 13:02:26

标签: java 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:Host is unresolved”或返回套接字错误。

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

感谢您的帮助 亚历山大

2 个答案:

答案 0 :(得分:2)

这很正常。当设备进入睡眠状态时,某些功能不可用。 AlarmManager保存CPU唤醒锁定,以便在警报响起时执行onReceive()方法。请注意,这仅影响此方法:如果启动服务,则此保证不会扩展到此服务。此外,它只为您提供CPU唤醒锁定,这意味着CPU将运行,而不是屏幕和网络。

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

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

答案 1 :(得分:1)

您应该尝试此http://developer.android.com/reference/android/net/wifi/WifiManager.WifiLock.html,以便在完成操作之前保持Wifi处于活动状态。当手机睡眠时,Wifi关闭。希望这有帮助!