如何在到达处理程序之前删除延迟的消息?

mor*_*itz 12 android messages handler

我的问题是我需要发送延迟1秒的消息.处理程序然后启动一些操作,你得到了图片.

但是仍然存在一些条件,其中应该删除已经发送的消息(在第二次过去之前)以防止处理程序做任何事情.我无法弄清楚如何做到这一点(或者如果它甚至可能),所以如果你们中的任何人都有线索,请告诉我.

Rom*_*Guy 36

这些removeMessages()方法没什么可怕的; 他们非常安全.该框架在很大程度上依赖于这些方法和他们在很多很多地方使用,尤其是在默认的小部件(View,ListView,等),这比建设更要好得多Handler忽略特定消息.这是编程,不要随你的感受:p


小智 6

许多开发人员和你会发现的大部分源代码都会向人们展示将匿名函数传递给处理程序,所以我认为在某些情况下你可能不确定如何删除它们.一个简单的解决方案是像任何其他对象一样声明runnable,并保留一个指向它的指针,该指针可用于从Handler队列中清除它的任何实例.

private Runnable lastMyRunnablePtr = null;
Run Code Online (Sandbox Code Playgroud)

...

private class MyRunnable implements Runnable
{}
Run Code Online (Sandbox Code Playgroud)

....

lastMyRunnablePtr = new MyRunnable();
mHandler.postDelayed(lastMyRunnablePtr ,30000);
Run Code Online (Sandbox Code Playgroud)

....

protected void onDestroy() {
  mHandler.removeCallbacks(lastMyRunnablePtr);
}
Run Code Online (Sandbox Code Playgroud)