gpt4 book ai didi

java - 使用 Handler 从 TimerTask 更新 GUI

转载 作者:行者123 更新时间:2023-11-29 08:57:07 25 4
gpt4 key购买 nike

在全局范围内,我有以下内容:

定时器 timer = new Timer();

在我的 onResume() 中,我有以下代码。

timer.schedule(new syncTimerTask(), 1, 30000);

我的 syncTimerTask 如下:

class syncOutgoingUpdatesTimerTask extends TimerTask
{
public void run()
{
//some sync process with outer back end server
//fetch results etc

myHandler.post(myRunnable);
}
}

我的 handler 和 runnable 全局声明如下

final Handler myHandler = new Handler();

final Runnable myRunnable = new Runnable()
{
public void run()
{
//update GUI, text views whatever.
}
};

在我的 onPause() 中调用 timer.cancel();

上面的代码很简洁,开门见山,完美地完成了工作。但是为了更好地把握这个想法,我有一些顾虑和问题。

  1. 假设同步时间过长,并且用户按下了后退按钮。这将导致 onPause 发生,这将阻止计时器重复自身,但是正在运行的 TimerTask 将继续运行。但是,当代码到达 myHandler.post(myRunnable); 行时,处理程序调用 runnable,但没有要更新的 GUI,会发生什么?我在那里得到一个空指针吗?
  2. 假设同步开始并再次花费大量时间,在这种状态下,用户按下主页按钮并退出应用程序并从“最近的应用程序”中删除该应用程序,这会“杀死”该应用程序,调用onDestroy() 在所有方法上。在这种情况下,计时器的线程(它是一个单独的线程而不是 UI 线程,在任何地方停止,(即使它可能在中间)是否因为它与应用程序相关联?),假设这是是的,代码甚至不会到达 myHandler.post(myRunnable);,所以不会出现空指针。是这样吗?

最佳答案

  1. 是的, Activity 将会举行,如果您取消 Activity ,可能会导致问题。您能做的最好的事情就是在您的 Runnable 中设置一个标志,告诉您 Activity 已暂停。

  2. 不,应用程序没有被杀死,只是停止了(除非 Android 进程管理器像往常一样为了内存而杀死它)。在这种情况下,您的计时器线程继续运行并在主线程中执行 Runnable,具有与 1 相同的潜在问题。

关于java - 使用 Handler 从 TimerTask 更新 GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19661116/

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