我有一个按钮(比如活动1),点击它时应该启动服务(例如服务1)。但是在服务开始之前必须有5秒的延迟。我在服务的onStartCommand中使用SystemClock.sleep(5000)实现了这一点。这工作正常。
现在我想添加一个功能,如果再次点击按钮(甚至在5秒结束之前),服务将不会启动。
任何想法如何做到这一点?
(编辑:请在将其标记为重复之前阅读整个问题。谢谢)
答案 0 :(得分:0)
您可以使用延迟发布的处理程序来实现您的目标。使您的按钮禁用并在五秒钟后启用它并启动您的服务。您可以实现以下代码:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
button.setEnabled(false);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
//start your service here
button.setEnabled(true);
}
}, 5000);
}
});
以上代码将禁用您的按钮5秒钟,并在5秒后启动您的服务。
答案 1 :(得分:0)
我使用类似于以下的util类。将它传递给一个可运行的和一个ms的延迟,你可以在它运行之前调用stop()
来取消它。如果要重新启动计时器,也可以呼叫restart()
。我将它用于沉浸式视图中的自动显示/隐藏控件之类的东西。
public class DelayableRunnable{
int mDelay = 0;
Handler mHandler = new Handler();
Runnable mRunnable;
boolean mIsRunning = false;
public DelayableRunnable(Runnable runnable, int delay){
mRunnable = runnable;
mDelay = delay;
}
public void setNewDelay(int delay){
mDelay = delay;
}
public void start(){
if(mIsRunning) {
stop();
}
mHandler.postDelayed(mRunnable, mDelay);
mIsRunning = true;
}
public void stop(){
mHandler.removeCallbacks(mRunnable);
mIsRunning = false;
}
public void restart(){
stop();
start();
}
}
答案 2 :(得分:0)
您可以在Android环境中使用nombre
功能进行延迟操作(优于计划java方法)
Handler.postDelayed
或者更简单地使用您查看功能(与上面相同):
final Handler handler = new Handler(); // or use existed one your_view.getHandler()
handler.postDelayed(new Runnable() {
@Override
public void run() {
//start your service
}
}, 5000 /* 5s * 1000ms */);
答案 3 :(得分:0)
线程的工具,用于在后台线程中安排将来执行的任务。任务可以安排为一次性执行,或者定期重复执行void schedule(TimerTask任务,长延迟)在指定的延迟后安排指定的任务执行。
new Timer().schedule(new TimerTask() {
@Override
public void run() {
alertDialog.dismiss();
startActivity(new Intent(****.this,*********.class));
}
},5000);