在服务内部使用处理程序

Mil*_*bar 5 android

我可以在服务内部使用此代码来延迟调用方法,还是Handler()只能在UI线程内部使用?

在a内部延迟调用方法的最佳方法是service什么?

final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
  @Override
  public void run() {
    //Do something after 10000ms
    socket.emit("CancelTravel");
  }
}, 10000);
Run Code Online (Sandbox Code Playgroud)

Gok*_*oku 9

Handler() 只应该在 UI 线程中使用?

是的,Handler()仅在UI线程上有用,如果您想在普通线程上使用,则需要实现looper

示例代码

    new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
        @Override
        public void run() {
            //Do something after 10000ms
            socket.emit("CancelTravel");

        }
    }, 5000);
Run Code Online (Sandbox Code Playgroud)

你也可以使用 Timer

线程调度任务以供将来在后台线程中执行的工具。任务可以安排为一次性执行,或定期重复执行。

示例代码

new Timer().schedule(new TimerTask() {          
    @Override
    public void run() {
        //Do something after 10000ms
    socket.emit("CancelTravel");       
    }
}, 10000);
Run Code Online (Sandbox Code Playgroud)

在服务内部调用延迟方法的首选方法是什么?

阅读TimertaskHandler

  • `“是的 Handler() 仅在 UI 线程上有用”` 它不是真的 - 它可以与附加了 `Looper` 的任何线程一起使用 - 例如 `HandlerThread` (2认同)