0
public void onCreate()
{
        mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
        mSensorManager.registerListener(this, mSensorManager
                .getDefaultSensor(Sensor.TYPE_LIGHT),
                SensorManager.SENSOR_DELAY_FASTEST);
        while(true);
}

-

 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);
    }
}

如果我插入 while,光传感器不会获取任何光值。如果我把这段代码(除了while)放在另一个线程中,同样的事情。为什么?听众不应该在后台工作吗?在传感器注册之后,我需要稍等片刻(我将在其他地方替换它),然后再检查光值。我能怎么做?

4

1 回答 1

0

你绝对不能

 while(true);

在 onCreate();

它绑定了 Android 中的主 (UI) 线程。

==========================

Android 运行一个事件循环。回调计划在事件循环中运行,但在控制从 onCreate() 返回之前无法运行。因此,您的程序将挂起,直到它收到 Application Not Responding 错误。

这个: http: //developer.android.com/reference/android/os/Looper.html 是开始阅读 Android 代码下的机制的好地方。

===================

使用线程的代码更糟糕,因为主线程仍然挂在 onCreate() 中,但现在您尝试为 IT 线程安排回调,但它没有运行事件循环。(更不用说它现在也挂了一段时间(真);)


尝试这个:

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);
}

并阅读此示例:http: //developer.android.com/reference/android/hardware/SensorManager.html

于 2013-11-12T22:12:03.800 回答