gpt4 book ai didi

android - 销毁 Activity 时停止处理程序可运行的任务

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:46:16 25 4
gpt4 key购买 nike

我通常将所有 Activity 事件委托(delegate)给一个单独的 Controller 类,它有一个特殊的方法来处理来自 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()方法被调用,它以这种方式清理 Controller 中的所有东西

@Override
protected synchronized void dispose() {
.................
if (model != null) {
synchronized (model) {
model.dispose();
}
model = null;
}
helper = null;
.....................
super.dispose();
}

如您所见, Controller 的处置发生在 UI 线程中,而不是将其委托(delegate)给处理程序线程。

例如,当在 onStartup() 方法中间调用 onDestroy 时会出现问题:onDestroy 清理模型并所有其他引用,但在 onStartup 方法内部,它会尝试在某个时候访问模型,但考虑到它是 null,就会抛出异常。

解决此问题的最佳方法是什么?我不想锁定每个 Controller 方法,因为其中一些方法可能会同时发生而不会相互干扰。

最佳答案

在 dispose() 方法中,您应该在处理模型之前清理 workerHandler。查看removeCallbacksremoveCallbacksAndMessage(null) Handler 类中的方法。当参数为 null 时,后一种方法会删除所有回调和消息。

关于android - 销毁 Activity 时停止处理程序可运行的任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9580551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com