繁体   English   中英

不断检查条件是否为真 - Android Studio 中的 Java

[英]Constantly check if a condition is true - Java in Android Studio

我正在 Java 中使用 Android Studio 制作 android 应用程序。 我的目标是能够不断检查条件是否为真,例如,如果一个变量为真,它必须采取某些行动。 如何在启动程序时始终检查此变量而不仅仅是一次?

您可以使用下面给出的代码片段并将它们放入始终与您的主代码并行运行的线程

while(true)
{
  if(_val)  //_val is your boolean variable
  {
      // your logic
  }
  Thread.sleep(100);

}

或者可以在单击该特定控件时引发事件,该控件检查_val的值并执行操作

方法 2:使用可观察模式:您可以将 boolean 包装在 class 中,您可以在其中监听更改。

class ObservableBoolean {
    
    // "CopyOnWrite" to avoid concurrent modification exceptions in loop below.
    private final List<ChangeListener> listeners =
            new CopyOnWriteArrayList<ChangeListener>();
    
    private boolean value;
    
    public boolean getValue() {
        return value;
    }
    
    public synchronized void setValue(boolean b) {
        value = b;
        for (ChangeListener cl : listeners)
            cl.stateChanged(new ChangeEvent(this));
    }
    
    public synchronized void addChangeListener(ChangeListener cl) {
        listeners.add(cl);
    }
    
    public synchronized void removeChangeListener(ChangeListener cl) {
        listeners.remove(cl);
    }
}

然后只需执行以下操作:

ObservableBoolean b = new ObservableBoolean();

//...

// Start the "period of time":
b.addChangeListener(iWantToBeNotifiedOfChanges);

// ...

// End the "period of time":
b.removeChangeListener(iWantToBeNotifiedOfChanges);

这实际上是 MVC 模式(和观察者模式)的一个简单案例。 在这种情况下,model 是 ObservableBoolean 并且视图将是希望收到更改通知的“视图”。

您还可以编写自己的ChangeListener接口。

您可以为此目的使用LiveData 下面是如何做到这一点的示例用法。

MutableLiveData<boolean> boolToObserve = new MutableLiveData<boolean>();
// onCreate of Activity
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    booltoObserve.observe(this, new Observer<boolean>() {
        @Override
        public void onChanged(@Nullable final boolean newValue) {
            MyActivity.this.valueChanged(newValue);
        }
    }
}

这样,您就不需要一次又一次地检查值。 只要从任何地方更改此值,就会调用您的方法。 希望这可以帮助。

编辑:您可以从逻辑中以这种方式更改此值:

boolToObserve.setValue(newValue);

使用java.util.Timer.scheduleAtFixedRate()java.util.TimerTask是一种可能的解决方案:

Timer t = new Timer();
t.scheduleAtFixedRate(
 new TimerTask(){
 public void run(){ System.out.println("hello"); //make your call here
    }
},
0,      // run first occurrence immediatetly
3000)); //runs every three seconds

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM