如果我有一个Handler handler = new Handler()并为它运行延迟任务handler.postDelayed(xxx, xxx),是否有可能检查是否已postDelayed()被调用?
Tri*_*ode 21
没有直接的API来实现这一点,但你可以通过使用该sendEmptyMessage函数来解决这个问题.希望这会有所帮助.
handler.sendEmptyMessage(some_integer);//Do this when you add the call back.
if(handler.hasMessages(some_integer))
handler.removeMessages(some_integer);//Do this after removing the call back.
Run Code Online (Sandbox Code Playgroud)
psk*_*ink 14
发布Runnable时处理程序获取带有"what"字段的消息== 0,所以理论上你可以调用hasMessages(0),但是你无法检查它是否已经给出了待处理的Runnable - 例如当发布r0和r1时你无法检查r0是否正在等待或不.
Handler.post()只是的便利包装方法sendMessageDelayed(),因此,如果您要检查处理程序是否具有仍在运行的特定挂起Runnable,或者是否postDelayed()已使用特定Runnable调用了该方法,请尝试使用以下类:
public class HandlerWithID extends Handler {
public final boolean postDelayed (Runnable r, int runnableID, long delayMillis) {
Message m = Message.obtain(this, r);
m.what = runnableID;
return sendMessageDelayed(m, delayMillis);
}
public final boolean post(Runnable r, int runnableID) {
return postDelayed(r, runnableID, 0);
}
public final boolean hasActiveRunnable(int runnableID) {
return hasMessages(runnableID);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21384 次 |
| 最近记录: |