来自非 Activity class 的处理程序

Handler from a non-Activity class

我们可以执行吗

handler.postDelayed(runnable,400)

来自非Activity class?

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

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

handler.postDelayed(runnable,400)

谁能帮我解决这个问题?

实际上我正在使用 OCR。如果进行了某些匹配,我想 return 自动到我的主 activity。我想它是一个活套。我还需要拍摄它的照片。为此,我需要使用处理程序。

Can we execute handler.postDelayed(runnable, 400) from a non-Activity class?

是的,你可以。

任意 Handler is associated with a Thread (not an Activity or another object) and the Thread's message queue. Handlers post/process Messages and Runnables to/from the queue that is handled by Looper.

当您在主线程中创建一个 Handler 时(例如在 Activity class 中)您 post/send 消息和 Runnables (使用 post()postDelayed()sendMessage() 等)到 运行 循环。但是,默认情况下,线程没有循环 运行 除非您随后调用 Looper.prepare() first and Looper.loop() 创建一个循环。

如果在后台线程上创建的 Handler 用于 post 消息和 Runnables 用于主线程队列

  • 将主线程的 Looper 传递给 Handlerconstructor
  • 或使用new Handler(Looper.getMainLooper()).

I tried debugging my app using break points, but the control is not reaching.

我假设您的代码逻辑永远不会达到 "the control",或者 handler 是在后台线程中创建的,没有准备和循环 Looper 这样 runnable 就可以'不会被 handler.

处理

我用了定时器。它对我有用。哈哈

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