2016-09-23 37 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