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

问题描述

| 我是android开发人员的新手,我想知道启动时以下代码是否会开始循环,检查连接结果,是否振动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); 
    }
    

解决方法

        是的,它会循环播放。不过,不要指望android进程管理器会使其存活太长时间。这还会导致发布大量可运行的对象,因为它会一遍又一遍地遍历while循环。     ,        由于onCreate()无法在可接受的时间内返回,因此该代码将被强制终止。您可以从onCreate()启动线程,但不能永远挂出。 失去while循环,而只是postDelayed()。您的runnable可以在其中循环(只要您告诉自己终止它的方法!)。 您可能会将变量
foundblock
(以及
connect()
函数的返回值)更改为布尔值或至少一个int值,因为String对于您所描述的内容是过大的,并且由于对字符串的相等性检查不会使用equality3ѭ运算符进行。     ,        由于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()重新启动它即可。