neo*_*ion 2 java multithreading android
我正在使用 ScheduledExecutorService 定期运行 Runnable。在 Runnable 中,我注册了一个 SensorEventListener。我注意到 SensorEventListener 回调在主线程上调用,而不是在 ScheduledExecutorService 的线程池中调用。我想从主线程处理传感器事件的回调。看起来我可以在调用 SensorManager 类的 registerListener() 时传递一个 Handler 对象,并且回调将在 Handler 所在的线程上运行。
有没有办法获得对 ScheduledExecutorService 的处理程序的引用?
这个很难(硬。常规ExecutorService没有 a Looper,您不能Handler在这样的线程中有 a 。
ALooper是一个无限循环,它出列并执行事件。因此,如果您安排执行程序被阻止。您可能可以根据 Looper 的事件处理来实现自己的执行程序,但我想这不是您想要的。
要从背景中使用传感器,您需要创建一个HandlerThread. 这是一个运行 Looper 的后台线程,因此它可以有一个Handler.
小例子
private HandlerThread mHandlerThread;
private Handler mBackgroundHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mHandlerThread = new HandlerThread("SomeNameHere");
mHandlerThread.start();
mBackgroundHandler = new Handler(mHandlerThread.getLooper());
mBackgroundHandler.post(new Runnable() {
@Override
public void run() {
// I can do blocking network here.
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
mHandlerThread.quitSafely();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1375 次 |
| 最近记录: |