私はled電球(Mi-Light、limitlessLedなど)を制御するアプリを構築しています。このアプリの目的は、ユーザーが不定期に選択して実行できるようにすることです。たとえば、「キャンドルライト」エフェクトでは、ユーザーが停止を決定するまで、黄色と赤の色合いの間で電球色が多かれ少なかれランダムに変わることがあります。Android:ワクロックを使用していてもデバイスがスリープしてから数分後にバックグラウンドプロセスが停止する
クイックバックグラウンド情報:これらの電球の制御方法は、WiFiネットワーク経由で送信されるUDPパッケージによるものです。したがって、デバイスがスリープ状態であっても、このようなUDPパッケージを送信し続ける必要があります。
少し調べたところ、睡眠中でもデバイスがWiFiネットワーク経由でUDPパッケージをブロードキャストできるようにするために、ウェークロックを使用しました(見つけられなかった方が良い場合に教えてくださいアウトについて)。
デバイスは一見、ある種のディープスリープモードに入り、ネットワーク経由でパッケージを送信するのを止めるまで、何分か(おそらく10分)は正常に動作します。
これを防ぐにはどうすればよいですか?そして、より一般的に言えば、上記のことを達成するために取るべき良いアプローチは何ですか?
ただ、参考のために、ここではわずか7色の配列を回転するコードのサンプル抜粋です:
[...]
private static boolean animationRunning = false;
private Timer timer = new Timer();
private PowerManager mgr = (PowerManager)getReactApplicationContext().getSystemService(Context.POWER_SERVICE);
private PowerManager.WakeLock wakeLock = mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeLock");
[...]
public void startAnimation(final int step) {
animationRunning = true;
wakeLock.acquire();
final int[] steps = { 0, 66, 99, 122, 166, 199, 255 };
resetTimer();
timer.scheduleAtFixedRate(new TimerTask(){
int curstep = 0;
@Override
public void run(){
byte[] Bytes = {64, (byte)steps[curstep], 85};
try {sendUdp(Bytes);} catch(IOException e) {};
curstep = curstep + 1;
if(curstep == steps.length) {
curstep = 1;
}
}
},0,1000);
}
あなたは右のAndroidサービスでこのコードを追加していますか? –
Xiaomiデバイスで何かテストをしていますか? MIUIは何があってもバックグラウンドプロセスを殺す傾向があります。 – earthw0rmjim
@ArpitRatanが言ったことを拡張すると、サービスでこれが必要になります。バックグラウンドで無期限に実行したい場合は、通知を必要とするか、Androidはgc'edと仮定します。 – zgc7009