2014-07-04 166 views
0

我有一項服務,可以打開前置攝像頭並顯示預覽。 現在我想對預覽圖像進行一些圖像處理,因此我設置了預覽回調。攝像頭在服務和預覽幀

我的問題是沒有調用回調,我得到臭名昭着的編舞消息「跳過X幀...太多的工作在其主線程」 這似乎很奇怪,因爲我目前所做的回調打印日誌行。此外,當我調試(通過ADT),並打破了日誌打印行,它被稱爲(但不是如果我讓它運行,然後嘗試在線路上打破它)。 這種情況發生在我的平板電腦上運行時(我沒有使用emultor),但是當我在手機上運行它時(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狀態:

A服務是可以在後臺執行長時間運行的操作和不提供用戶界面的應用組件。

你應該在活動中完成它。

+1

感謝您的回答,但那是非常錯誤的。一項服務不提供用戶界面,但它確實可以容納一個視圖,因爲我在佈局上顯示了一個相機預覽,並且我的手機上的一切正常。 – Ysch

+0

如果未顯示視圖,則系統不會讓您從相機捕捉幀。順便說一句,在活動環境之外持有視圖肯定會導致內存泄漏;) –

+1

顯示視圖,在我的手機上一切正常。從活動上下文中持有視圖本身不會導致內存泄漏。它其實是一個很常見的做法。以Facebook Messenger爲例(如下所示:[http://www.piwai.info/chatheads-basics/] – Ysch