在Android中实现一个简单的循环

时间:2011-06-07 17:35:02

标签: java android loops

所以我来自java世界,通常当我想循环时,我可以使用类似的东西:

while(true) {
    //code here till false
}

但在Android中我注意到这种循环,至少在我的onCreate()方法中导致应用程序无法运行。我想要使​​用的循环非常简短,并调用一些简单的UI更新(更改背景颜色)。

如何在Android中实现调用UI更改的循环?我在哪里放这个循环? (显然不是onCreate)非常感谢示例/示例代码。

4 个答案:

答案 0 :(得分:2)

您可能想重新考虑您的设计。您不希望像活动的onCreate()方法那样执行阻塞循环。您正在阻止任何UI更新,最终可能只是挂起您的应用程序。您可能希望将循环移动到AsyncTask

答案 1 :(得分:2)

平均来说,这个循环执行了多少次?如果它是用于持续监视某些内容的循环,那么您应该使用新线程来执行此操作。您可以使用单例并同步访问几个getter / setter来来回传递数据。

您可能已经知道这一点,但如果您使用while(true)循环,那么您还应该有一个Thread.sleep(...),以免锁定CPU。

你可以这样做:

public class SingletonClass implements Runnable {

    private boolean someValue;

    public static final SingletonClass INSTANCE = new Test();

    private Test() {
      Thread t = new Thread(this);
      t.setDaemon(true);
      t.start();
    }

    public synchronized boolean getValue() {
      return someValue;
    }

    public synchronized void setValue(boolean value) {
      someValue = value;
    }

    @Override
    public void run() {
      while (true) {
        // ... do your work here...

        // Monitor something and set values
        setValue(true);

        Thread.sleep(500);
    }
  }
}

在您的活动中,您可以访问以下必要的项目:

SingletonClass.INSTANCE.getValue()

答案 2 :(得分:0)

您也可以尝试查找可以覆盖/扩展的现有方法,例如onDraw或onLayout。有关详细参考,请参阅View文档。

答案 3 :(得分:0)

我建议使用Handler和Runnable。

private Handler mHandler = new Handler();
private boolean isDone = false;
private Runnable indefinateTask = new Runnable() {
@Override
public void run() {
    if(isDone){
        mHandler.removeCallbacks(this);
    } else {
        //Perform Your Operation Over Here
        mHandler.postDelayed(indefinateTask, 1);
    }


}

};

并在onCreate调用中

new Thread(indefinateTask).start();

可能帮助: http://developer.android.com/resources/articles/painless-threading.html

希望这有帮助。干杯!!!

相关问题