我的应用程序中有10个不同的按钮,用于执行不同的任务。我想开发一个持续检查(监听)的服务,如果用户在特定时间内没有点击任何按钮,比如说5秒,我希望执行其他任务。如何检查用户是否未单击任何按钮?如果有人有任何想法,请告诉我。
您可以简单地将Timer设置为所需的长度。单击按钮时,只需重置计时器即可。在onResume中启动计时器,这样即使用户从电话或其他活动中回来,计时器也会启动。您可能也应该在活动的onPause中停止计时器。
在您的每个点击监听器中,保存最后一个按钮被点击的时间:
private long lastClickTimestamp;
private Handler handler = new Handler();
public void onCreate( Bundle saved ) {
BackgroundJob job = new BackgroundJob();
handler.postDelayed( job, SECONDS_TO_WAIT * 1000 );
button1.setClickListener( new OnClickListener() {
public void onClick( View view ) {
lastClickTimestamp = System.currentTimeInMillis();
// do the listener logic for button 1 here.
}
});
button2.setClickListner( new OnClickListener() {
public void onClick( View view ) {
lastClickTimestamp = System.currentTimeInMillis();
// do the listener logic for button 2 here.
}
});
// repeat that for all 10 buttons.
}
现在,更聪明的开发人员将创建一个可重复使用的基类,该基类处理一次时间戳设置,然后在10个按钮中的每个按钮中重复使用该基类。但是,这取决于你。然后后台作业看起来像:
public class BackgroundJob implements Runnable {
private boolean done = false;
// meanwhile in job:
public void run() {
if( lastClickTimestamp > 0 && System.currentTimeInMillis() - lastClickTimestamp > SECONDS_TO_WAIT * 1000 ) {
// let's do that job!
}
if( !done ) {
// reschedule us to continue working
handler.postDelayed( this, SECONDS_TO_WAIT * 1000 );
}
}
}
如果你必须使用一项服务,你可以向该服务发送通知,说点击了一个按钮,然后该服务可以跟踪发生这种情况的时间。我不会为此使用服务,因为如果应用程序被放在后台或被杀死,播放动画或声音就不需要生存。服务是指当某人在做其他事情时播放音乐、聊天应用程序,或者当用户不与应用程序交互时需要在后台运行的事情。你所描述的可以像我所展示的那样完成,因为当用户接到电话或短信时,他们会离开你的应用程序,你播放的动画或声音可能也应该停止。使用我展示的Handler选项非常容易。更困难,但可行,与服务。
每次单击按钮时,将一些日历对象更新到一个新的日历实例,然后您可以检查该日历的时间,并查看它是否超过5分钟。
//this is a field
Calendar calendar;
public void onClick(View v) {
calendar = Calendar.getInstance();
//etc
switch(v.getId()) {
}
}