Android WakeLock не выпущен после getActiveNetworkInfo

Я хочу автоматически проверять подключение к Интернету каждые 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 или что я пропускаю? Я определенно не хочу, чтобы мое приложение вызывало пробуждение.

1 ответ

Решение

Я не понимаю, как 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();
}
Другие вопросы по тегам