如何解决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()重新启动它即可。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。