時,我通常委託活動事件到一個單獨的控制器類,它有從Activity
停止處理器運行的任務破壞活性
@Override
public boolean handleMessage(int what, Object data) {
switch (what) {
case ExerciseViewEvent.STARTUP:
workerHandler.post(new Runnable() {
public void run() {
onStartup();
}
});
return true;
}
此處理事件的特殊方法,以保持UI線程響應和完成在後臺任務中進行所有計算。
然而,當Activity.onDestroy()
方法由系統調用,controller.dispose()
方法被調用,其中清理在控制所有的東西這樣
@Override
protected synchronized void dispose() {
.................
if (model != null) {
synchronized (model) {
model.dispose();
}
model = null;
}
helper = null;
.....................
super.dispose();
}
正如你所看到的,控制器處置發生在UI線程,不委託給一個處理程序線程。
的問題發生時,例如,onDestroy
被稱爲onStartup()
方法的中間:onDestroy
清理模型和所有其他引用,但裏面onStartup
方法,它試圖在某個時候訪問的模式,但考慮到它是null
,引發異常。
解決此問題的最佳方法是什麼?我不想鎖定每個控制器方法,因爲它們中的一些可能會同時發生而不會相互干擾。
此外,系統可能不會調用onDestroy方法。 – Yury 2012-03-06 18:18:56
好點的Yuri,但是如果它沒有被調用,那麼所有由活動分配的對象都被JVM自己銷燬了?所以我不必擔心,對吧?在處置我只處理所有的對象,沒有別的。 – 2012-03-08 09:03:19