2016-09-23 38 views
2

我們可以執行處理器

handler.postDelayed(runnable,400) 
從非 Activity

我有一個控制器類,假設它是一個適配器。我們可以在那裏使用Handler嗎?

我試圖調試使用斷點我的應用程序,但控制沒有達到

handler.postDelayed(runnable,400) 

誰能幫助我對此?

其實我正在使用OCR。如果進行了某些匹配,我想自動返回到我的主要活動。我想它是一個活套。我還需要拍攝它的照片。爲此我需要使用處理程序。

+2

當然,您可以使用來自非活動類的'handler'。你爲什麼會另有其他假設?請多一點信息。你在哪裏創建了「Handler」?控制不到的地方在哪裏?另外,'postDelayed()'返回布爾值。它是「真」還是「假」? – bitbybit

回答

3

我們可以從非Activity類執行handler.postDelayed(runnable, 400)嗎?

是的,你可以。

任何HandlerThread(不是Activity或另一物體)和Thread的消息隊列相關聯。 Handlers post/processMessages and Runnables to/from隊列由Looper處理。

當你在主線程中創建一個Handler(例如,在Activity類)您郵寄/發送消息和Runnables(與post()postDelayed()sendMessage()等)到正在運行的循環。但是,默認情況下,線程不會循環運行,除非您先創建一個調用Looper.prepare(),然後再調用Looper.loop()

如果在後臺線程創建的Handler是張貼消息和Runnables到主的線程隊列要麼

  • 通過主線程的LooperHandlerconstructor
  • 或使用new Handler(Looper.getMainLooper())

我試着用斷點調試我的應用程序,但控件沒有達到。

我假定任一代碼邏輯從未達到「控制」或handler而不製備和循環Looper使得runnable不能由handler待處理的後臺線程中創建。

0

我用過計時器。它爲我工作。大聲笑。

new Timer().schedule(new TimerTask() { 
     @Override 
     public void run() { 
      Intent data = new Intent(); 
      data.putExtra(OcrCaptureActivity.TextBlockObject, textBlock.getValue()); 
      Log.d("Read Text : ", textBlock.getValue()); 
      Base.base_activity.setResult(CommonStatusCodes.SUCCESS, data); 
      Base.base_activity.finish(); 
     } 
    }, POST_DELAYED_TIME); 
+2

您應該像@Onik所建議的那樣使用Handler。它很簡單:'(新處理程序(Looper.getMainLooper())。postDelayed(new MyRunnable(),delay);' 使用TimerTask這只是另一個線程,你將無法更新UI永遠成爲一件事。 – DataDino