2

x 分ごとにインターネット接続を自動的にチェックし、データをサーバーに送信したいと考えています。ただし、次の (最小限の) コードでは、Eclipse で警告が表示され、release() 呼び出しに常に到達するとは限らないことが示されます。

PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "");
wl.acquire();

// check active network
ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cm.getActiveNetworkInfo();
// start a service that uploads data
wl.release();

wl.release() が呼び出されない可能性がある方法がわからないので、それはEclipseのバグですか、それとも何が欠けていますか? アプリがウェイクロックを引き起こすことは絶対にしたくありません。

4

1 に答える 1

3

wl.release() が呼び出されない可能性がある方法がわかりません

まあ、他に何もないとしても、例外を処理していません。と の間の何かがacquire()を発生さrelease()せるとRuntimeException、クラッシュして がリークしWakeLockます。これを使って:

PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "");
wl.acquire();

try {
  // check active network
  ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
  NetworkInfo info = cm.getActiveNetworkInfo();
  // start a service that uploads data
}
finally {
  wl.release();
}
于 2013-08-08T14:27:31.973 に答える