因此,顯然Handlers
應聲明爲靜態或他們可以泄漏他們的外部類(以及應用程序上下文一起)。這顯然限制了你可以用Handler
做什麼,我想知道我想要做什麼實際上是可能的。看看這段代碼:如何將靜態處理程序與服務/活動一起使用?
public class MyService extends Service {
private int counter;
private static final Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
// Increment counter here
}
};
@Override
public void onCreate() {
super.onCreate();
counter = 0;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
handler.sendEmptyMessage(0);
return Service.START_STICKY;
}
@Override
public IBinder onBind(Intent arg0) {
return null;
}
}
靜態處理程序不能撐到服務的引用,因此一個簡單的counter++
內handleMessage()
是行不通的。有沒有辦法檢查服務是否正在運行並獲取對它的引用?
請參閱http://stackoverflow.com/questions/11407943/this-handler-class-should-be-static-or-leaks-might-occur-incominghandler – biegleux 2012-07-15 16:59:49