Android中的多个处理程序出现问题

时间:2016-01-08 20:43:27

标签: java android

所以,我有一个带处理程序的活动。

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()

每个函数都显示一个控制台文本,这就是我如何弄清楚调用哪个函数。

有人能解释我为什么吗?

1 个答案:

答案 0 :(得分:0)

发布m_Runnable(来自LivePageLiveMatch)之后,它会执行其内容,然后安排自己在5秒内运行。基本上,每次通过单击启动一个,它会创建一个无限循环。足够的点击次数,您将拥有不断运行的逻辑。 (也就是说,除非你有一些其他代码定期调用你没有向我们展示的mHandler.removeCallbacks(m_Runnable);。)如果你不了解更多关于你要做什么的事情,很难建议如何解决这个问题,但是你应该以某种方式避免创造这种无限循环。

请注意,您在UI线程上创建的所有处理程序只需将Runnable个对象提供给线程的(单个)MessageQueue。所以没有从一个处理程序或另一个处理程序调用的东西。