我有以下代码。
//This is global for the activity.
Handler handler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
//update the UI
}
};
在我的 onResume() 中,我正在启动一个运行可运行文件的新线程。
protected void onResume()
{
super.onResume();
Thread t = new Thread(runnable);
t.start();
}
我的可运行文件如下:
Runnable runnable = new Runnable()
{
public void run()
{
// some networking stuff
// some db stuff
// whatever
handler.sendEmptyMessage(0);
handler.postDelayed(new Runnable()
{
public void run()
{
new Thread(runnable).start();
}
}, 30000);
}
}
我在 onPause() 里面有这个:
protected void onPause()
{
super.onPause();
handler.removeCallbacks(runnable);
}
最后,我调用了,handler.sendEmptyMessage(0);
以便handleMessage(Message msg)
调用它并更改 UI,然后重复该任务,但启动一个新的可运行对象,这将启动一个运行与此相同的可运行对象的新线程。
澄清问题:
我在 onResume() 中启动了一个新线程,这意味着可运行对象没有在 UI 线程上运行,但是,处理程序是在 UI 线程上创建的,并且自然地附加到 UI 线程。UI是如何完美改变的?
它应该用于 handler.removeCallbacks(runnable),但是,每当我最小化应用程序时,runnable 仍然每 30 秒运行一次。(这可能是因为它在一个新线程上,与创建的处理程序无关)。我怎样才能让它停止?