在全球范围内,我有以下内容:
Timer 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);
}
}
我的处理程序和runnable全局声明如下
final Handler myHandler = new Handler();
final Runnable myRunnable = new Runnable()
{
public void run()
{
//update GUI, text views whatever.
}
};
在我的onPause()中,我打电话给timer.cancel();
上面的代码很简洁,直截了当,完美地完成了工作。 但为了更好地掌握这个想法,我有一些顾虑和问题。
myHandler.post(myRunnable);
行时会发生什么,但是没有GUI可以更新?我在那里得到一个空指针吗?myHandler.post(myRunnable);
所以不会出现空指针..这是这种情况吗?答案 0 :(得分:0)
是的,该事件将会运行,如果您取消了某些内容,则可能会导致问题。您可以做的最好的事情是在您的Runnable
上设置一个标记,告诉您该活动已暂停。
不,应用程序不是被杀,只是停止了(除非Android进程管理器像往常一样将其杀死内存)。在这种情况下,您的计时器线程继续运行并在主线程中执行Runnable
,具有相同的潜在问题1.