你认为Thead.sleep()是一种很好的服务方法吗?

时间:2016-10-23 13:22:25

标签: android multithreading service handle

我的服务为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();
}

1 个答案:

答案 0 :(得分:1)

  

你认为Thead.sleep(3000)是一个好方法吗?

从不。服务在没有UI的应用程序主线程上运行。如果你持有应用程序主线程一段时间,应用程序将提示ANR消息。

  

怎么做

如果您想在几秒钟后执行操作,那么您可以在服务中使用CountDownTimer,其中包含方法onTick& onFinish其中onTick会定期点击,onFinish会在时间到来时点击。{/ p>