在销毁活动时停止处理程序可运行的任务

我通常将所有的Activities事件委托给一个单独的控制器类,它有一个处理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线程中发生,而不需要委托给处理线程。

例如,在onStartup()方法中调用onDestroy时,会发生问题: onDestroy清理模型和所有其他引用,但是在onStartup方法中,它尝试在某个时刻访问模型,但考虑到它为null ,抛出exception。

解决这个问题的最好办法是什么? 我不想locking每一个控制器的方法,因为他们中的一些可能同时发生而不会相互干扰。

Solutions Collecting From Web of "在销毁活动时停止处理程序可运行的任务"