所以,我有一个带处理程序的活动。
private final Runnable m_Runnable = new Runnable()
{
public void run()
{
if(LiveAPI.getStatus() == 1){
matches = LiveAPI.getMatches();
listAdapter.notifyDataSetChanged();
}
LivePage.this.mHandler.postDelayed(m_Runnable, 5000);
}
};
我在这里获得一些数据并用它更新我的列表。它有效。
当我点击列表中的某个项目时,此功能称为
private void showLiveMatch(int position) {
Intent i = new Intent(this, LiveMatch.class);
i.putExtra("match", matches.get(position));
startActivity(i);
}
我的新活动出现了,它还包含另一个处理程序:
private final Runnable m_Runnable = new Runnable()
{
public void run()
{
if(LiveAPI.getStatus() == 1){
match = LiveAPI.getMatch(match.getId());
displayCommentaries();
}
LiveMatch.this.mHandler.postDelayed(m_Runnable, 5000);
}
};
有时这会按我的意愿运作。
但在某些情况下,似乎在第二个活动中仍然从第一个处理程序调用{{1}}而不是LiveAPI.getMatches()
每个函数都显示一个控制台文本,这就是我如何弄清楚调用哪个函数。
有人能解释我为什么吗?
答案 0 :(得分:0)
发布m_Runnable
(来自LivePage
或LiveMatch
)之后,它会执行其内容,然后安排自己在5秒内运行。基本上,每次通过单击启动一个,它会创建一个无限循环。足够的点击次数,您将拥有不断运行的逻辑。 (也就是说,除非你有一些其他代码定期调用你没有向我们展示的mHandler.removeCallbacks(m_Runnable);
。)如果你不了解更多关于你要做什么的事情,很难建议如何解决这个问题,但是你应该以某种方式避免创造这种无限循环。
请注意,您在UI线程上创建的所有处理程序只需将Runnable
个对象提供给线程的(单个)MessageQueue
。所以没有从一个处理程序或另一个处理程序调用的东西。