kat*_*tit 20 android android-handler
如果没有完成,我创建1分钟延迟计时器来关闭服务.看起来像这样:
private Handler timeoutHandler = new Handler();
Run Code Online (Sandbox Code Playgroud)
在onCreate()里面
timeoutHandler.postDelayed(new Runnable()
{
public void run()
{
Log.d(LOG_TAG, "timeoutHandler:run");
DBLog.InsertMessage(getApplicationContext(), "Unable to get fix in 1 minute");
finalizeService();
}
}, 60 * 1000);
Run Code Online (Sandbox Code Playgroud)
如果我在这1分钟之前完成工作 - 我想取消这个延迟的事情但不确定如何.
Bri*_*uis 45
你不能用匿名的Runnable真正做到这一点.如何将Runnable保存到命名变量?
Runnable finalizer = new Runnable()
{
public void run()
{
Log.d(LOG_TAG, "timeoutHandler:run");
DBLog.InsertMessage(getApplicationContext(), "Unable to get fix in 1 minute");
finalizeService();
}
};
timeoutHandler.postDelayed(finalizer, 60 * 1000);
...
// Cancel the runnable
timeoutHandler.removeCallbacks(finalizer);
Run Code Online (Sandbox Code Playgroud)
Abd*_*ady 14
如果你不想保留runnable的引用,你可以简单地调用:
timeoutHandler.removeCallbacksAndMessages(null);
Run Code Online (Sandbox Code Playgroud)
官方文件说:
...如果token为null,则将删除所有回调和消息.
Fem*_*emi 10
您可能希望postDelayed使用sendMessageDelayed类似的替换使用:
private Handler timeoutHandler = new Handler(){
@Override
public void handleMessage(Message msg)
{
switch (msg.what){
case 1:
((Runnable)msg.obj).run();
break;
}
}
};
Run Code Online (Sandbox Code Playgroud)
然后发布消息:
Message m = Message.obtain();
m.what = 1;
m.obj = new Runnable(){
public void run()
{
Log.d(LOG_TAG, "timeoutHandler:run");
DBLog.InsertMessage(getApplicationContext(), "Unable to get fix in 1 minute");
finalizeService();
}
};
timeoutHandler.sendMessageDelayed(m, 60 * 1000);
Run Code Online (Sandbox Code Playgroud)
然后取消:
timeoutHandler.removeMessages(1);
Run Code Online (Sandbox Code Playgroud)
没有跟踪必要的可运行.
| 归档时间: |
|
| 查看次数: |
17937 次 |
| 最近记录: |