我想在使用RXJava的非主线程中调用“onSensorChanged”方法。
这是我的传感器代码。
public class Accelerometer implements SensorEventListener {
private Sensor linearAccelerSensor;
static PublishSubject<SensorEvent> accelerData = PublishSubject.create();
public static Observable<SensorEvent> getAccelerObservable(){ return accelerData; }
public void initSensor(SensorManager sm){
linearAccelerSensor = sm.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION);
sm.registerListener(this,linearAccelerSensor,10000000);
}
@Override
public void onSensorChanged(SensorEvent event) {
if(event.sensor == linearAccelerSensor){
Log.d("Accelerometer","Acclerometer onSensorchanged");
Log.d("Accelerometer",Thread.currentThread().getName())
accelerData.onNext(event);
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
myCompositeDisposable.add(Accelerometer.getAccelerObservable()
.observeOn(Schedulers.computation())
.subscribeOn(Schedulers.io())
.subscribeWith(new DisposableObserver<SensorEvent>() {
@Override
public void onNext(SensorEvent sensorEvent) {
//textViewAccel.setText(sensorEvent.toString());
Log.d("ServiceAccelerometer",sensorEvent.toString());
lAccX = sensorEvent.values[0];
lAccY = sensorEvent.values[1];
lAccZ = sensorEvent.values[2];
lAccX = Math.round(lAccX*100)/100.0;
lAccY = Math.round(lAccY*100)/100.0;
lAccZ = Math.round(lAccZ*100)/100.0;
double accel = Math.sqrt((lAccX * lAccX) + (lAccY * lAccY) + (lAccZ * lAccZ));
accel = Math.round(accel*100)/100.0;
//textViewAccel.setText(lAccX+" "+lAccY+" "+lAccZ);
Log.d("ServiceAccelerometer",String.valueOf(accel));
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
})
);
return START_NOT_STICKY;
}
除了Main之外,不能在任何线程上调用OnSensorChanged。RxJava甚至不能考虑到它--框架调用它,而框架并不使用RxJava。现在您可以做的是让onSensorChange调用RxJava将数据从主线程推送到另一个线程。这是一个好主意还是只会导致麻烦,这取决于您对传感器结果做了多少工作,以及之后是否需要更新UI。这样做可能会导致更多的延迟和线程之间的混乱。
我使用的房间用于存储有关购物车详细信息。 我想删除主线程中的记录。我出错了 无法访问主线程上的数据库,因为它可能会长时间锁定 我检查了下面的链接,但没有帮助我 使用room(rxjava)执行删除 如何在android room和rxjava 2中插入数据并获取id作为out参数? 道阿ccess.java 应用班 我的异步任务正在工作 如何在RxJava中实现这一点。因为我的DAO删除返回无效?
问题内容: 我想使用redis的pubsub传输一些消息,但不想使用阻止,例如以下代码: 最后一部分将被阻止。我只想检查给定频道中是否有数据,该如何完成?有没有类似的方法? 问题答案: 我认为那不可能。通道没有任何“当前数据”,您订阅了一个通道并开始接收该通道上其他客户端推送的消息,因此它是一个阻塞的API。另外,如果您查看pub / sub 的Redis Commands文档,将会更加清楚。
问题内容: 我的一项活动遇到了一个奇怪的问题。从拍照/录像回来时,我正在显示一个对话框,允许用户命名相机。用户按下“确定”后,我将使用所请求的文件名发送给主题,该主题将复制文件(并显示进度对话框)。 由于某种原因,即使我调用,总是在主线程上调用执行复制的函数。 更改呼叫以解决问题。我还是想知道为什么它不起作用… 问题答案: 并且是那里最混乱的运营商。前者确保订阅副作用在指定的调度程序(线程)上发生
问题内容: 好的,因此我们正在尝试将3D散点图合并到NetBeans 7.0中的项目中,而我们选择测试的库之一就是Jzy3D。看起来它可以完成我们需要做的所有事情,但是不幸的是,它什么也没做。 我已经正确安装了JOGL,并对其进行了测试并发现它可以正常工作。然后,我包含了与演示中相同的依赖项。我也尝试过直接包括.jars。是的,胶原- rt.jar在库文件夹中。 编辑: 为了使JOGL工作,我们不
问题内容: 我正在为Android手机的客户端/服务器应用程序设计框架。我对Java和Android都相当陌生(但对于一般的编程(尤其是线程编程)不是新的)。 有时,我的服务器和客户端将处于同一进程中,有时它们将处于不同的进程中,具体取决于确切的用例。客户端和服务器接口如下所示: IServer.aidl: IClient.aidl: 现在,这里变得有趣了。我可以预见一些用例,在这些用例中,客户端
问题内容: 我是Java新手,我想知道我是否具有以下典型的Java代码 JVM是否保证将始终运行finally块?为了了解我的来历,我已经习惯了C / C ++程序,如果您取消引用NULL指针,并且之后没有任何代码可以运行,它们可能会崩溃。 但是,据我了解Java和整个GC /托管内存业务的一般情况,没有诸如空指针取消引用之类的东西,所有这些都是可捕获的期望,因此,我的程序实际上没有崩溃的方法可能