我是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);
}
答案 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()。