2014-12-22 2 views
0

Myo 완장을 사용하는 Smart Home 제어 응용 프로그램을 개발 중입니다. 나는 그들의 SDK를 사용하고있다. 그러나 나는 해결 방법이 확실하지 않은 문제를 겪는다.특정 스레드에서 Myo SDK Listener를 실행하는 방법

Myo 포즈를 수신하는 Background Service가 있지만 SDK 및 Device Listener도 백그라운드 스레드에서 초기화되며 이벤트 (예 : 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); 
     } 
    } 
} 

답변

1

흠 그래서 문제가 무엇인지 알게되었습니다.

리스너가 실행해야하는 스레드를 지정하려면 해당 스레드의 허브를 초기화해야합니다 (응용 프로그램의 런타임에 완전히 처음으로).

Myo를 연결하기 위해 ScanActivity를 사용하고 있었고 응용 프로그램의 UI 부분 (기본 스레드에서 실행 중)에 ScanActivity를 사용하고 있었기 때문에 ScanActivity를 사용하기 전에 허브를 초기화해야하므로 먼저 주 스레드에서 초기화 했으므로 Listener 이벤트는 Main thread에서도 발생했습니다 ...

관련 문제