2016-01-08 22 views
0

所以,我有一個處理的活動。有多個處理程序麻煩的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); 
    } 

}; 

這裏我得到一些數據並用它更新我的列表。有用。

當我點擊我的列表中的項目,這functon被稱爲

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

每個函數顯示控制檯文本,這就是我弄明白叫什麼功能。

有人能解釋我爲什麼?

回答

0

一旦您發佈m_Runnable(來自LivePageLiveMatch),它會完成它的工作,然後安排自己在5秒內運行。基本上,每次你點擊一次就會創建一個無限循環。足夠的點擊次數,你將擁有不斷運行的每一個邏輯。 (也就是說,除非你有一些其他的代碼,定期調用mHandler.removeCallbacks(m_Runnable);你還沒有告訴我們。)不知道更多關於你想要做什麼,很難建議如何解決這個問題,但你應該以某種方式避免創建這些無限循環。

請注意,您在UI線程上創建的所有處理簡單地養活Runnable對象爲(單)MessageQueue的線程。所以不存在從某個處理程序或另一個處理程序調用的東西。

+0

實況活動實時顯示多個遊戲的體育賽事比分和數據需要定期刷新。 LiveMatch活動顯示關於單個匹配的實時信息。 LiveApi.getMatch(matchId)被調用並且信息被更新。問題是,在某些情況下LiveApi.getMatch()不叫我的信息沒有更新 – UnguruBulan

+0

@UnguruBulan - 這聽起來像一個不同的問題,從您在您的文章中描述的內容。或者可能不是。正如我所說的,除非您停止循環,即使在您每5秒鐘啓動一次調用「LiveAPI.getMatch()」的循環之後,每隔5秒仍會對「LiveAPI.getMatches()」進行調用。這能解釋你所看到的嗎?不知道這兩個方法做了什麼,是否有可能調用'getMatches()'干擾對'getMatch()'的調用? –

+0

感謝試圖幫助我,我用'mHandler.removeCallbacks(m_Runnable);'當我切換到第二個活動,和'this.mHandler.postDelayed(m_Runnable,5000);'當恢復的第一個。現在它正在工作。再次感謝 – UnguruBulan