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();
}