问题描述
|
我是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()重新启动它即可。