2017-09-16 8 views
0

私はアンドロイドサービスを利用しています。私はデバイスがスリープ状態であってもサービスを常に実行したい。しかし、私のデバイスがスリープ状態になると、私のサービスは停止します。これは私のコードアンドロイドデバイスがスリープ状態のときにAndroidサービスが動作しなくなる

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    isRunning = true; 
    mythread = new Thread() { 
     @Override 
     public void run() { 
      while (isRunning) { 
       turnOnScreen(60000*3); 
       //Download some information by android Volley request 
       downloadInfo();    
       try { 
        Thread.sleep(60000*2); 
       } catch (InterruptedException e) { 
        isRunning = false; 
        e.printStackTrace(); 
       } 
      } 
     } 
    }; 
    if (isRunning) { 
     if (!mythread.isAlive()) { 
      mythread.start(); 
     } 
    } 

    return START_REDELIVER_INTENT; 
} 

され、turnOnScreen方法は

private void turnOnScreen(long milliSeconds){ 
    PowerManager mgr = (PowerManager)this.getSystemService(this.POWER_SERVICE); 
    PowerManager.WakeLock wakeLock = mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeLock"); 
    wakeLock.acquire(milliSeconds); 
    } 

ある人を助けてください。前もって感謝します。

答えて

1

私は、デバイスがスリープ

場合であっても、サービスの実行は、常にあなたのユーザーがこれに同意しないことがありたいと思います。確かに多くのユーザーが電池残量の不満を訴えています。そのため、Googleやデバイスメーカーは、開発者がこのようなことをしないようにするための措置を講じています。

しかし、私のサービスは、私のデバイスは、Android 8.0以降では、睡眠

ときに、あなたのサービスは、1分後に実行を停止します停止しています。 Android 6.0以降では、デバイスがDozeモードになると、あなたのアプローチは機能しません。メーカーによっては、Android 6.0より前の同様の制限が実装されていました。さらに、downloadInfo()に1分以上の時間がかかると、デバイスがwakelockの間でスリープ状態になることがあります。

関連する問題