android wakelock在getActiveNetworkInfo之后没有发布

时间:2013-08-08 14:05:33

标签: android wakelock

我想每隔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 个答案:

答案 0 :(得分: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();
}