安卓 - 如何运行你的传感器(服务,线程,活动)



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

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

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

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

我不想阻止 UI 线程,所以我认为我需要一个单独的线程(游戏处理程序(来运行游戏,然后我调用 runOnUithread 并从那里使视图无效。我还将电路板表示形式与视图分开,以便将屏幕表示为矩阵,然后视图将使用该矩阵来了解屏幕的外观。但我不确定实现倾斜传感器的最佳方法是什么。它应该在单独的线程中运行还是在与游戏处理程序相同的线程中运行?如何确保 SensorManager 在 GameHandler 线程中实际调用 onSensorChanged?

以我的拙见,你应该:

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

B( 获取两个线程的 looper 引用,以使它们保持活动状态,等待未来的请求。

B( 正常监听主线程上的 onSensorChanged ,但不做任何其他事情(这很重要(,然后将值的副本委托给一个新的可运行对象,该对象将处理您的游戏逻辑。

C( 相应地将新的可运行对象排入 WorkerThread looper 引用上的队列。

D( 让可运行对象(已经离开主线程(执行它们必须执行的操作,并将更改同步到一个单例,有兴趣更新您的视图的人可能会咨询该单例。

最新更新