2014-07-04 4 views
0

프론트 카메라를 열고 미리보기를 보여주는 서비스가 있습니다. 이제 미리보기 이미지에서 일부 이미지 처리를 수행하려고하므로 미리보기 콜백을 설정합니다.서비스중인 카메라 및 onPreviewFrame

내 문제는 콜백이 호출되지 않는다는 것입니다. 악명 높은 Choreographer 메시지에서 "X 프레임 건너 뛰기 ... 주 스레드에서 너무 많은 작업"이 발생합니다. 콜백에서 현재 수행중인 작업이므로 매우 이상하게 보입니다. 로그 라인을 인쇄하고 있습니다. 또한 ADT를 통해 디버깅 할 때 로그 인쇄 라인을 중단하면 호출됩니다. (실행하지 못하게 한 다음 언젠가는 줄을 끊으려고합니다). 태블릿에서 실행할 때 (에뮬레이터를 사용하지 않음) 발생하지만 휴대 전화 (태블릿보다 강력한 Nexus 5)에서 실행할 때 매번 프레임이 건너 뛰지 않고 콜백이 호출됩니다.

내 사용자 정의 SurfaceHolder에 surfaceCreated() : 그것을 얻는 방법에 대한

public void surfaceCreated(SurfaceHolder holder) { 
    try { 
     mCamera.setPreviewDisplay(holder); 

    } catch (IOException e) { 
     Log.d(TAG, "Error setting camera preview: " + e.getMessage()); 
    } 
    try { 
     mCamera.setPreviewCallback(new Camera.PreviewCallback() { 

      public void onPreviewFrame(byte[] data, Camera arg1) { 
        Log.d("Freshub.BackgroundService", "onPreviewFrame Called!!"); 
      } 
     }); 
    } catch (Throwable e) { 
     e.printStackTrace(); 
    } 
    mCamera.startPreview(); 
} 

어떤 제안 내 태블릿에 작동하는?

답변

0

Service으로는 수행 할 수 없습니다.
official documentation 상태 :

서비스는 백그라운드에서 실행 시간이 긴 작업을 수행 할 수 있으며, 사용자 인터페이스를 제공하지 않는 응용 프로그램 구성 요소입니다.

활동 내에서해야합니다.

+1

답변 해 주셔서 감사합니다.하지만 이는 매우 잘못되었습니다. 서비스는 사용자 인터페이스를 제공하지 않지만 레이아웃에 카메라 미리보기를 표시하고 모든 것이 내 휴대폰에서 잘 작동하므로보기를 확실히 유지할 수 있습니다. – Ysch

+0

보기가 표시되지 않으면 시스템에서 카메라의 프레임을 캡처 할 수 없습니다. 활동 컨텍스트 외부보기를 들고 BTW, 확실히 메모리 누수가 발생할 수 있습니다;) –

+1

보기가 표시됩니다 및 내 휴대 전화에 다 잘 작동합니다. 활동 컨텍스트 외부에서 뷰를 보유해도 메모리 누수가 발생하지는 않습니다. 실제로는 아주 일반적인 관행입니다. 예를 들어 페이 스북 메신저를 가져 가십시오 (여기에 보이는 것과 같이 : [http://www.piwai.info/chatheads-basics/] – Ysch

관련 문제