我想每隔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中的错误还是我错过了什么?我绝对不希望我的应用程序导致唤醒锁定。
答案 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();
}