小编Thi*_*man的帖子

SensorEventListener位于单独的线程中

这似乎是一个基本的问题,但在搜索了一段时间并使用它之后,我已经到了可以欣赏一些帮助的地步.我想让一个SensorEventListener在一个与UI不同的线程中运行,这样当事件进入时需要进行的计算不会减慢UI的速度.

我最近的尝试看起来像:

class SensorThread extends Thread {
    SensorManager mSensorManager;
    Sensor mSensor;

    public void run() {
        Log.d( "RunTag", Thread.currentThread().getName() ); // To display thread
        mSensorManager = (SensorManager)getSystemService( SENSOR_SERVICE  );
        mSensor = mSensorManager.getDefaultSensor( Sensor.TYPE_ACCELEROMETER );
        MySensorListener msl = new MySensorListener();
        mSensorManager.registerListener(msl, mSensor, SensorManager.SENSOR_DELAY_UI );
    }

    private class MySensorListener implements SensorEventListener {
        public void onAccuracyChanged (Sensor sensor, int accuracy) {}
        public void onSensorChanged(SensorEvent sensorEvent) {
            Log.d( "ListenerTag", Thread.currentThread().getName() ); // To display thread
        }
    }
Run Code Online (Sandbox Code Playgroud)

在活动(或服务)onCreate()中,我创建了一个SensorThread对象并调用其start()方法.正如您所料,调试日志显示新线程中的"RunTag"条目.但onSensorChanged()的"ListenerTag"正在主线程中运行,即使它的对象在新线程中实例化.我该如何改变?

events android

15
推荐指数
3
解决办法
1万
查看次数

标签 统计

android ×1

events ×1