2015-02-12 43 views
1

我所創建的處理程序到達的handleMessage(),handler.sendMessage()是不是在android系統

public final Handler handlerPositionTest = new Handler() { 
     public void handleMessage(Message msg) { 
     Log.i(TAG, "handleMessage------------reached"); 
      //MyCode here 
     } 
    }; 

另外我有一個通用的事件偵聽器接收事件的細節,

private GenericEventListener PositionStatusChangedListener = new GenericEventListener() { 
      public void eventTriggered(Object sender, Event event) { 
      Log.i(TAG, "Event triggered here------------"); 
      Log.i(TAG, "Event is not null------------:"+event); 
      Log.i(TAG, "hanlder------------:"+handlerPositionTest); 
      Message msg = handlerPositionTest.obtainMessage(); 
      msg.what = 2; 
      msg.obj = e; 
      handlerPositionTest.sendMessage(msg); 
} 
}; 

如果我連續觸發事件,則sendMessage()方法在處理程序中的handleMessage()方法沒有達到幾秒鐘,並且它也丟失了該事件消息。如果我在幾秒鐘後嘗試它, rks正確,我的意思是它到達handleMessage()

我不清楚重現此問題的場景。它隨機發生。

如果你們對這個問題有什麼想法,請留下評論。

在此先感謝。

+0

進程的詳細信息,我看不出有任何代碼來啓動處理程序到另一個線程。你在UI線程上工作繁重嗎? – mach 2015-02-12 06:57:21

+0

是的,我知道這可能導致沉重的工作。但與我目前的東西有任何關係? – Srinivasan 2015-02-12 06:59:51

回答

0

如果您正在進行無法及時返回的同步調用,則可能需要在後臺線程上啓動處理程序。

HandlerThread handlerThread = new HandlerThread(
      "Background thread", 
      android.os.Process.THREAD_PRIORITY_BACKGROUND 
    ); 
    handlerThread.start(); 
    mHandler = new android.os.Handler(handlerThread.getLooper(), this); 

只要確保把內runOnUiThread(Runnable)

UI的所有更新有關線程,我建議你檢查出Android developer guide to processes and threads

+0

@math ...我對這個概念完全陌生。我試着用eventTriggered()方法實現你的代碼嗎? – Srinivasan 2015-02-12 07:10:31