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();
}
任何建議至於怎樣得到它在我的平板電腦工作?
感謝您的回答,但那是非常錯誤的。一項服務不提供用戶界面,但它確實可以容納一個視圖,因爲我在佈局上顯示了一個相機預覽,並且我的手機上的一切正常。 – Ysch
如果未顯示視圖,則系統不會讓您從相機捕捉幀。順便說一句,在活動環境之外持有視圖肯定會導致內存泄漏;) –
顯示視圖,在我的手機上一切正常。從活動上下文中持有視圖本身不會導致內存泄漏。它其實是一個很常見的做法。以Facebook Messenger爲例(如下所示:[http://www.piwai.info/chatheads-basics/] – Ysch