java - OnSensorChanged线程

标签 java android multithreading service android-sensors

我需要在onSensorChanged方法上做很多工作,所以我的应用程序冻结了。
我试图在方法OnSensorChanged中创建线程。它有一点帮助,但是每秒钟多次创建新线程并不是我认为的最佳方法。我该怎么办?

我创建了自己的sensorService,它扩展了Service并实现了SensorEventListener。

@Override
public void onSensorChanged(SensorEvent event) {
    Thread w = new Thread(new Worker(event));
    w.start();

}

class Worker implements Runnable{
    SensorEvent event;
    Worker(SensorEvent event){
        this.event=event;
    }
    @Override
    public void run() {
        if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){
            accelerometerData(event);
        }
        if(event.sensor.getType()==Sensor.TYPE_GRAVITY){
            gravityData(event);
        }
        if(event.sensor.getType()==Sensor.TYPE_LINEAR_ACCELERATION){
            linearAccelerometerData(event);
        }
    }
    private void linearAccelerometerData(SensorEvent event) {
        expensiveWork();
        Intent intent = new Intent("SensorService");
        intent.putExtra("data",data)            LocalBroadcastManager.getInstance(SensorService.this).sendBroadcast(intent);
    }

    private void accelerometerData(SensorEvent event){  
        expensiveWork2();
        Intent intent = new Intent("SensorService");
        intent.putExtra("data",data)    
        LocalBroadcastManager.getInstance(SensorService.this).sendBroadcast(intent);
    }
}

我可以在其自己的线程上启动服务吗?还是只创建一个线程并给他工作?

最佳答案

您应该向处理程序注册监听器

public boolean registerListener (SensorEventListener listener, Sensor sensor, int rateUs, Handler handler)

例如
// Class members
private HandlerThread mSensorThread;
private Handler mHandler;

onCreate
mSensorThread = new HandlerThread("sensor_thread"); //$NON-NLS-1$
mSensorThread.start();
mHandler = new Handler(mSensorThread.getLooper());
....
Sensor sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
if (sensor != null)
{
    mSensorManager.registerListener(this, sensor, your_desired_rate, mHandler);     
}

关于java - OnSensorChanged线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23012639/

相关文章:

java - 异步加载内容时闪烁

java - 我的 BroadcastReceiver 类中的空指针异常

java - 图像在 Android 上无法正确调整大小

Android - 使用 ViewPager 和 fragment 的时间和祖先导航

java - 混合模式下的 jstack : WrongTypeException: No suitable match for type of address

java - Android:考虑2个分隔字符分割字符串

java - 从 Elasticsearch 的 JSON 响应形成自定义 JSON 对象

android - 使用支持库中的 GridLayout 会导致 'NoSuchMethodError: android.support.v4.view.ViewCompat.getLayoutDirection'

java - 并发写入 titan DB 以提高性能

multithreading - CoreFoundation : Receive/process notifications in background thread