2011-10-18 131 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

相關問題