我的服务为MyService
。在我的服务中,我有一个全局变量:value
由函数control_Value()
控制。用于控制varialbe value
值的函数如下:
调用该函数的时间称为初始时间。在初始时间,该值设置为
One
。从初始时间开始3秒后,该值设置为Zero
。该值将保持Zero
,直到再次调用该函数。
根据上述规则,我写了control_Value()
如下:
public void control_Value()(){
value="One";
try{
Thread.sleep(3000);
value="Zero";
}
catch{}
}
你认为Thead.sleep(3000)是一个好方法吗?如果没有,请给我一个更好的解决方案。请注意,上述功能运作良好。
这是我的服务
public class MyService extends Service {
String value=null;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//TODO do something useful
return Service.START_NOT_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
//TODO for communication return IBinder implementation
return null;
}
@Subscribe
public void onSMSContentReceived(OnSMSReceiverEvent event) {
control_Value();
}
}
更新:短信来电话时会自动调用onSMSContentReceived
。
这是使用来自TGMCians建议的倒计时器的解决方案
//Global variable
private CountDownTimer mCountDownTimer;
//
@Override
protected void onDestroy() {
if(mCountDownTimer!=null){
mCountDownTimer.cancel();
}
super.onDestroy();
}
public void control_Value()(){
mCountDownTimer = new CountDownTimer(3000,1000) {
@Override
public void onTick(long millisUntilFinished) {
value="One";
}
@Override
public void onFinish() {
// Your stuff
value="Zero";
}
};
mCountDownTimer.start();
}
答案 0 :(得分:1)
你认为Thead.sleep(3000)是一个好方法吗?
从不。服务在没有UI的应用程序主线程上运行。如果你持有应用程序主线程一段时间,应用程序将提示ANR消息。
怎么做
如果您想在几秒钟后执行操作,那么您可以在服务中使用CountDownTimer
,其中包含方法onTick
& onFinish
其中onTick
会定期点击,onFinish
会在时间到来时点击。{/ p>