来自非活动类

时间:2016-09-23 16:02:31

标签: java android multithreading android-handler android-looper

我们可以执行

handler.postDelayed(runnable,400)

来自非Activity类?

我有一个控制器类,假设它是一个适配器。我们可以在那里使用Handler吗?

我尝试使用断点调试我的应用,但控件未到达

handler.postDelayed(runnable,400)

有人可以帮我解决这个问题吗?

其实我正在使用OCR。如果进行了某些匹配,我想自动返回到我的主要活动。我想它是一个笨蛋。我也需要捕捉它的照片。为此,我需要使用处理程序。

2 个答案:

答案 0 :(得分:3)

  

我们可以从非handler.postDelayed(runnable, 400)类执行Activity吗?

是的,你可以。

任何Handler都与Thread(不是Activity或其他对象)和Thread的消息队列相关联。 Handlers发布/ 处理 MessagesRunnables到/ 来自Looper处理的队列。

当你在主线程中创建Handler时(例如在Activity类中),你发布/发送消息和Runnablespost()postDelayed()sendMessage()等)到运行循环。但是,默认情况下,线程没有循环运行,除非您先创建一个调用Looper.prepare(),然后调用Looper.loop()

如果在后台线程上创建的Handler要将消息和Runnables发布到主线程队列

  • 将主要帖子的Looper传递给Handler的{​​{3}}
  • 或使用new Handler(Looper.getMainLooper())
  

我尝试使用断点调试我的应用,但控件未到达。

我假设您的代码逻辑永远不会到达“控件”或在后台线程中创建handler而没有准备和循环Looper,因此无法处理runnablehandler

答案 1 :(得分:0)

我用过计时器。它对我有用。 LOL。

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