Java 在Android中使用多个处理程序时遇到问题

Java 在Android中使用多个处理程序时遇到问题,java,android,Java,Android,因此,我有一个带有处理程序的活动 private final Runnable m_Runnable = new Runnable() { public void run() { if(LiveAPI.getStatus() == 1){ matches = LiveAPI.getMatches(); listAdapter.notifyDataSetChanged(); }

因此,我有一个带有处理程序的活动

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);
        }

    };
有时候这是我想要的。 但在某些情况下,第二个活动似乎仍然从第一个处理程序调用
LiveAPI.getMatches()
,而不是
LiveAPI.getMatch(match.getId())

每个函数都会显示一个控制台文本,这就是我如何确定调用哪个函数的方法


有人能解释一下原因吗?

一旦你发布了
m_Runnable
(从
LivePage
LiveMatch
),它会完成自己的工作,然后安排自己在5秒钟内运行。基本上,每次你点击一次,它就会创建一个无限循环。如果点击次数足够多,您将不断运行每一个操作的逻辑。(也就是说,除非您有一些其他代码周期性地调用
mHandler.removeCallbacks(m_Runnable);
,您还没有向我们展示过这些代码。)在不了解更多关于您尝试执行的操作的情况下,很难推荐如何修复此问题,但您应该以某种方式避免创建此类无限循环


请注意,您在UI线程上创建的所有处理程序只需将
Runnable
对象馈送到线程的(单个)
MessageQueue
。因此,不存在从一个处理程序或另一个处理程序调用任何东西的情况。

LivePage活动显示多场比赛的实时运动成绩,并且需要定期刷新数据。LiveMatch活动显示有关单个匹配的实时信息。调用LiveApi.getMatch(matchId)并更新信息。问题是在某些情况下,不会调用LiveApi.getMatch(),也不会调用我的信息updated@UnguruBulan-这听起来和你在文章中描述的问题不同。也许不是。正如我所说,除非停止循环,否则对
LiveAPI.getMatches()
的调用将继续每5秒发生一次,即使在您启动了每5秒调用
LiveAPI.getMatches()
的循环之后也是如此。这能解释你看到了什么吗?在不知道这两个方法的情况下,调用
getMatches()
是否会干扰对
getMatch()
的调用?感谢您的帮助,我使用了
mHandler.removeCallbacks(m_Runnable)当我切换到第二个活动时,以及
this.mHandler.postDelayed(m_Runnable,5000)当a恢复到第一个时。现在它;他在工作。谢谢again@UnguruBulan-很高兴听到。请注意,如果您在非UI线程上调用
removeCallbacks
,而此时回调恰好正在运行(在UI线程上),那么它仍将重新调度自身。因此,如果存在这种可能性,您可能希望使用
synchronized
块来排除这种可能性,和/或使用
boolean
标志变量,回调可以使用该变量来指示何时不应重新安排自身。