簡體   English   中英

設備休眠時,Android應用停止工作

[英]Android app stop to work when device sleep

好吧,我在我的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”或返回套接字錯誤。

奇怪的是,如果我按下設備上的任何按鈕並且屏幕亮起,則應用程序返回正常工作並訪問網站。 有誰知道如何解決這個問題?

感謝Alexandre的一些幫助

這很正常。 設備進入睡眠狀態時,某些功能不可用。 AlarmManager保持CPU喚醒鎖定,以便在警報響起時執行onReceive()方法。 請注意,這僅影響此方法:如果啟動服務,則此保證不會擴展到此服務。 此外,它只為您提供CPU喚醒鎖定,這意味着CPU將運行,而不是屏幕和網絡。

要從您的服務訪問Wifi,您需要獲取WifiManager.WifiLock 對於3g,屏幕和其他功能,請參閱PowerManager

此外,每隔30秒運行一次網絡掃描會在幾個小時內耗盡電池 - 用戶不會喜歡這樣。 重新考慮使用服務器推送(帶wifi鎖定)同步適配器

您應該嘗試這個http://developer.android.com/reference/android/net/wifi/WifiManager.WifiLock.html ,以便在完成操作之前保持Wifi活動。 手機休眠時,Wifi會關閉。 希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM