gpt4 book ai didi

android - 检查 Android 处理程序是否有回调

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:52:20 25 4
gpt4 key购买 nike

我有一些设置计时器的代码,但是如果用户在使用计时器时设置了计时器,我需要删除运行计时器的可运行对象并重新启动它。但是当不存在可运行的处理程序回调并且调用此代码时,它会使我的应用程序崩溃。所以我需要检查处理程序是否正在运行,如果是,则结束并重新启动它,但是查看文档和其他 Stackoverflow 问题,我看不出这是否可行。

这是我的代码,我对只有在存在可运行的处理程序时才应执行的代码进行了评论:

    submitTimer.setOnClickListener(new View.OnClickListener(){

public void onClick(View v) {
String s = timer.getText().toString();
if(!s.equals(""))
{
//I NEED TO CHECK A RUNNABLE HANDLER EXISTS AND IF SO THEN RUN THIS CODE, IF NOT IGNORE THIS CODE
Map.handler.removeCallbacks(Map.getRunnable());
Map.runnable.run();
//I NEED TO CHECK A RUNNABLE HANDLER EXISTS AND IF SO THEN RUN THIS CODE, IF NOT IGNORE THIS CODE
int l = Integer.parseInt(s);
Map.timerinmins = l;
timer.setHint("Current Timer is "+Map.timerinmins);
timer.setText("");
Toast.makeText(Preferences.this, "Timer is set!", Toast.LENGTH_SHORT).show();
}

else
{

Toast.makeText(Preferences.this, "No value was entered", Toast.LENGTH_SHORT).show();
}
}

});

谁能帮我想出一种检查处理程序当前状态的方法?

最佳答案

引用Jay Snayder的回复:

因为有些情况下 Map.handler.hasMessages(CALLBACK_PRESENT_INTEGER) 返回 false 即使 Map.handler.sendEmptyMessage(CALLBACK_PRESENT_INTEGER) 已被调用(发生在我身上) , too), 使用 bool 值来确定处理程序是否有回调可能更安全。
因此,代码逻辑非常简单,如下所示:

...

boolean callbackPresent = false;

...

if(!callbackPresent) {

// do what you have to do in case the handler doesn't have callbacks

// right before adding a callback to the handler, call:
callbackPresent = true;

} else {

// do what you have to do in case the handler has callbacks

// right before removing the callbacks from the handler, call:
callbackPresent = false;
}

...

我在一个应用程序中使用这个解决方案,它运行良好。

关于android - 检查 Android 处理程序是否有回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15816262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com