我正在开发智能家庭控制应用程序,使用Myo臂章。我正在使用他们的SDK,但我运行的问题,我不知道如何解决。
我有后台服务,它正在侦听Myo提示,但是即使SDK和设备侦听器也在后台线程中初始化,它的事件(例如onPose)是在主线程中引发的。
有没有办法强迫SDK在后台线程上引发事件?
服务代码:
public class ListeningService extends Service {
@Override
public void onCreate() {
HandlerThread thread = new HandlerThread("MyoListener",
Process.THREAD_PRIORITY_BACKGROUND);
thread.start();
mServiceLooper = thread.getLooper();
mServiceHandler = new ServiceHandler(mServiceLooper, this);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Message msg = mServiceHandler.obtainMessage();
msg.arg1 = startId;
mServiceHandler.sendMessage(msg);
return START_STICKY;
}
private final class ServiceHandler extends Handler {
private Context context;
public ServiceHandler(Looper looper, Context context) {
super(looper);
this.context = context;
}
@Override
public void handleMessage(Message msg) {
Hub hub = Hub.getInstance();
if (!hub.init(context, getPackageName())) {
showToast("Couldn't initialize Hub");
stopSelf();
return;
}
mListener = new MyoListener(context);
hub.addListener(mListener);
}
}
}发布于 2014-12-22 17:05:26
嗯,所以我发现了问题所在。
如果您想指定您的侦听器应该在哪个线程上运行,则必须在该线程上初始化集线器(在应用程序运行时完全是第一次)。
我使用ScanActivity连接Myo,我在应用程序的UI部分(运行在主线程中)中使用了它,由于在使用ScanActivity之前必须初始化Hub,所以首先在主线程中初始化它,因此侦听器事件也是在主线程中引发的。
https://stackoverflow.com/questions/27606757
复制相似问题