2011-10-18 4 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にアクセスします。このコードは、エミュレータで正常に動作しますが、私のデバイスでは動作しません。電話機がスリープして(画面がブラックアウトすると)、Webページにアクセスせず、アプリケーションはcatch(Throwable e)でエラーを返します。「java.net.UnknownHostException:ホストが解決されていません」、またはソケットエラーが返されます。

奇妙なことは、デバイス上のボタンを押して画面が点灯すると、アプリケーションは正常に動作し、Webサイトにアクセスするということです。 誰もこの問題を解決する方法を知っていますか?いくつかの助けのための

おかげで アレクサンドル

+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

関連する問題