0

我正在开发使用 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);
        }
    }
}
4

1 回答 1

1

嗯,所以我发现了问题所在。

如果要指定侦听器应在哪个线程上运行,则必须在该线程上初始化集线器(这是应用程序运行时的第一次)。

我正在使用 ScanActivity 来连接 Myo,我在应用程序的 UI 部分(在主线程中运行)拥有它,因为在使用 ScanActivity 之前你必须初始化 Hub,我首先在主线程中初始化它,因此监听器事件是也在主线程中提出......

于 2014-12-22T17:05:26.910 回答