2013-11-14 5 views
7

Android cordova/phonegap 응용 프로그램에 대한 사용자 정의 플러그인을 만들고 원시 자바 측 화재는 시작하는 서비스에서 호출하는 콜백을 포함하는 활동을합니다. 그 아이디어는 서비스에서 1 초마다 콜백이 발생하고 멋지게 작동하지만 문제는 다른 스레드에서이 코드를 실행할 수 없다는 것이므로 주 코드바 스레드가 차단되고 응용 프로그램이 완전히 응답하지 않는다는 것입니다. 문서를 바탕으로 코르도바 플러그인 차단 스레드

내가이 일을 해요 :

@Override 
public boolean execute(String action, JSONArray args, final CallbackContext context) throws JSONException 
{ 

/* snip */ 
    cordova.getThreadPool().execute(new Runnable() 
    { 
     public void run() 
     { 
      Intent myIntent = new Intent(this.cordova.getActivity(), myMonitoring.class); 
      this.cordova.getActivity().startActivity(myIntent);  
      callbackContext.success(); 
     } 
    }); 

    return true; 
} 

내가 JS 콜백이 호출되지 얻을 않습니다 여기에 실현 (즉 callbackContext.success();) 활동이 차단하지만, 때문에해야하지 실제 폰갭 스레드 킵 return true 이후에 실행 하시겠습니까? startActivity 전화를 제거하면 앱이 예상대로 작동합니다.

답변

6

문제점을 조사하고 있습니다 (다른 문제). 하지만 UI 메인 스레드가 코르도바 스레드와 같지 않은 것 같습니다. 그리고 UI 메인 스레드가 실제로 릴리스되지만 Cordova 스레드는 릴리스되지 않습니다.

callbackContext.success(); 

callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, result)); 

그것은 아직 구운되지 죄송합니다, :

BTW, 나는 또한 사이에 차이가 있다고 생각합니다. 좀 더 찾으면 업데이트 할게.

또한 callbackContext.success();을 먼저 호출 한 다음 나머지는 .. (아무 것도 도움이된다면)로 호출 할 수 있습니다.

+0

Cordova 3.1.0에서 3.3.0으로 업그레이드하면 주요 스레딩 문제가 해결되었습니다. 관련 버그 (스레딩/이벤트)가 발견되어 (3.4.0) 다음 릴리스에서 수정 될 것으로 생각하여 3.4.0을 건너 뛰고 3.5.0을 기다리고 있습니다. – Oren