Android - 如何运行传感器(服务,线程,活动)?

时间:2013-10-08 19:46:52

标签: android multithreading sensor

我正在写一个简单的倾斜游戏。按照您倾斜手机的方向在屏幕上滚动球。

所以我下载了一个关于如何获取传感器数据并且工作正常的示例(我使用旋转矩阵来避免欧拉角问题)。但后来我尝试把它放到一个更大的应用程序中,我在使它工作时遇到了一些麻烦。

我的第一个想法是在一个单独的线程中运行倾斜传感器但是 我的类:公共类TiltSensor扩展了Thread实现的SensorEventListener 工作不顺利。 我得到一轮价值然后停止。

您将如何实施此应用程序?

我不想阻止UI线程所以我认为我需要一个单独的线程(GameHandler)来运行游戏,然后我调用runOnUithread并从那里使View无效。我还将Board表示与View分开,因此我将屏幕表示为矩阵,然后视图将使用该矩阵来了解屏幕的外观。 但我不确定实施TiltSensor的最佳方法是什么。它应该在一个单独的线程或与GameHandler相同的线程中运行吗?如何确保SensorManager实际调用GameHandler线程中的onSensorChanged?

1 个答案:

答案 0 :(得分:1)

在我谦逊的经历中,你应该:

A)正常在主线程上注册SensorListener,但要在其构造函数上生成两个(或根据需要)WorkerThreads。

B)获取两个线程的looper引用,以保持它们等待将来的请求。

B)通常在主线程上听你的onSensorChanged,但不要做其他事(这很重要)然后将值的副本委托给一个新的可运行对象来处理你的游戏逻辑。

C)相应地在您的WorkerThread looper引用上将新的runnable对象入队。

D)让runnables(已经离开你的主线程)做他们必须做的事情,并将更改同步到一个单身人士,可以由有兴趣更新你的观点的人查阅。