Android新手,这会在启动时循环吗?

时间:2011-06-23 22:04:03

标签: android

我是Android dev的新手,我想知道在启动时,以下代码是否会开始循环,检查连接的结果,振动如果为1,然后再睡5分钟?

/** Called when the activity is first created. */
boolean flag = true;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    while(flag) {
        Handler handler = new Handler(); 
        handler.postDelayed(new Runnable() { 
            public void run() { 
                String foundblock = connect("blahblahblah"); //will return either 0 or 1
                if (foundblock == "1") {
                    Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
                    long milliseconds = 10;
                    v.vibrate(milliseconds);
                    flag = false;
                }
            } 
        }, 300000); 
    }

3 个答案:

答案 0 :(得分:1)

是的,它会循环播放。不要指望android进程管理器将它保持活着太长时间。它还会导致大量的runnables被发布,因为它会一遍又一遍地遍历while循环。

答案 1 :(得分:1)

由于onCreate()未在可接受的时间限制内返回,因此将强制终止此代码。你可以从onCreate()开始一个线程但你不能永远地闲逛。

丢失while循环,只是postDelayed()。你的runnable可以在其中循环(只要你给自己一种方法告诉你终止它!)。

您可以将变量foundblock(以及connect()函数的返回)更改为boolean或至少是int,因为String对于您所描述的内容而言过于苛刻,因为字符串检查是否相等未使用==运算符执行。

答案 2 :(得分:1)

由于onCreate有时间限制,它会崩溃。如果您将循环放在一个单独的线程中,那么它将阻止应用程序崩溃。 例如:

Thread myThread = new Thread(){
        public void run(){
            while(flag) {
                        int foundblock = connect("blahblahblah"); //will return either 0 or 1
                        if (foundblock == 1) {
                        Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
                        long milliseconds = 10;
                        v.vibrate(milliseconds);
                        flag = false;
                        } 
            }
       }
    };
    myThread.start();

这肯定有效,而不是让这个线程进入休眠状态,只需在你想要等待的时间之后重新启动它,再次调用myThread.start()。