Java Android传感器和环路
-Java Android传感器和环路,java,android,sensors,Java,Android,Sensors,- 如果我插入while,光传感器不会接受任何光值。如果我把这段代码(除了while)放在另一个线程中也是一样的。为什么?听众不应该在backgorund工作吗?我需要等待一点(我会取代,而whti其他东西)后,传感器注册,然后再检查光值。我该怎么办?你绝对不能 public void onCreate() { new lt().start() while(true); } class lt extends Thread {
如果我插入while,光传感器不会接受任何光值。如果我把这段代码(除了while)放在另一个线程中也是一样的。为什么?听众不应该在backgorund工作吗?我需要等待一点(我会取代,而whti其他东西)后,传感器注册,然后再检查光值。我该怎么办?你绝对不能
public void onCreate()
{
new lt().start()
while(true);
}
class lt extends Thread
{
public void run()
{
mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
mSensorManager.registerListener(this, mSensorManager
.getDefaultSensor(Sensor.TYPE_LIGHT),
SensorManager.SENSOR_DELAY_FASTEST);
while(true);
}
}
在onCreate()中
它连接Android中的主(UI)线程
=========================
Android运行一个事件循环。回调已计划在事件循环中运行,但在控件从onCreate()返回之前无法运行。因此,您的程序将挂起,直到收到应用程序未响应的错误
这:
这是一个开始阅读Android代码下的机制的好地方
==================
使用线程的代码更糟糕,因为主线程仍然挂起在onCreate()中,但现在您正尝试为IT线程安排回调,但它没有运行事件循环。(更不用说它现在也挂了一段时间了(没错);)
试试这个:
while(true);
阅读下面的例子:
while(true)代码>将继续运行,这是一个永无止境的循环。如果您想等待,您需要使用某种类型的计时器类。请参见,或者我刚刚注意到新的lt().start()行中缺少分号。我假设这是问题中的一个输入错误,但行实际上以分号结尾;你是说即使我创建了一个新线程,我仍然在onCreate()中?新线程是在新的IT.start()中创建的;线路。下一个语句,无限while循环,仍然在旧线程中运行,所以是的,您仍然在运行onCreate()。我仍然无法理解这一点。为什么他们在同一条线上?如果我使用asynctask而不是线程,我可以做些什么吗?我从onCreate启动了线程。在创建注册侦听器的asynctask之后,我在线程中放置了一个sleep(问题的while)。这是可行的,但我不知道这是否是一个好的解决方案。
while(true);
public void onCreate()
{
super.onCreate();
setContentView(R.layout.myLayout);
[other activity initialization code]
mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
mSensorManager.registerListener(this, mSensorManager
.getDefaultSensor(Sensor.TYPE_LIGHT),
SensorManager.SENSOR_DELAY_FASTEST);
}