Сначала, пожалуйста, извините мой плохой английский. У меня есть окончательная версия моего приложения (школьная работа) - оно делает фотографии, а затем фотографии сшиваются с использованием кода C++. Я протестировал приложение на своем телефоне Xperia mini API 15, на этом устройстве все в порядке. Но я позаимствовал школьный Nexus 5 API 21 и есть две проблемы.
Первая проблема расстраивает. Сегодня я отлаживал весь день без решения. Я понятия не имею, какая часть кода может вызвать эту ошибку. Всякий раз, когда приложение работает — неважно, делает ли оно фото или сшивает, LogCat показывает тысячи этих ошибок:
Tag: BufferQueueProceducer Text: [unnamed-3046-0] dequeueBuffer: Bufferqueue has been abandoned
Код останавливается после этой ошибки. К сожалению, я могу быть более конкретным, потому что я не знаю. где может быть причина.
Вторая проблема только в процессе сшивания фото, когда вдруг показывает Приложение не отвечает (ANR). Но когда я нажимаю «Подождать», приложение продолжает склеивать фотографии. Результат хороший, но диалог раздражает. Я нашел решение на этой странице - проблема в среде выполнения ART. Я хотел изменить среду выполнения с ART на Dalvik, но в Nexus 5 нет возможности для изменения. Есть ли другой выбор? Ошибка в логкат:
Tag: art Thread[5,tid=6270, `WaitingInMainSignalCatcherLoop,Thread*=0xf60e40,peer=0x12c00080,"Signal Catcher"]: reacting to signal 3`
Спасибо за каждый совет, ЛС
Я упрощаю код (это основная часть), чтобы вы могли легко анализировать, но если хотите, я могу написать все коды здесь.
// button for stitching photo in folder 'img'
public void onlyStitchButtonClicked(View button)
{
File root = new File(urlStorage + "img");
if (!root.exists()){
toaster("Folder '" + urlStorage + "img' doesnt exist");
}else{
// show message on TextView
tOutput.append("Stitching.\n");
choosenResultSize = getUsersSize();
// without delay text dont show in TextView
new Handler().postDelayed(new Runnable() {
public void run() {
Stitching(urlStorage, "img", choosenResultSize);
tOutput.append("End stitching.\n");
}
}, 500);
}
return;
}
// Button for taking photo and stitching them
public void startButtonClicked(View button){
// Get users settings
tOutput.setText("App is running. Start taking photo.\n");
// Wait delay before taking first photo
new Handler().postDelayed(new Runnable() {
public void run() {
StartShot();
}
}, DelayBeforeStart*1000);
}
// Take collection of photos
private void StartShot(){
new CountDownTimer(((1+NumOfPhoto)*DelayBetweenShot)*1000, DelayBetweenShot*1000) {
private int Photo = 0;
@Override
public void onTick(long millisUntilFinished) {
tOutput.append("Photo num. " + ++Photo );
try{
camera.takePicture(null, null, mPicture);
}
catch(Exception e){}
}
@Override
public void onFinish() {
tOutput.append("Stop taking photo. Start stitching");
// Wait delay before taking first photo
new Handler().postDelayed(new Runnable() {
public void run() {
Stitching(urlStorage, FolderName, choosenResultSize);
tOutput.append("Stitching done.");
scrollview.fullScroll(ScrollView.FOCUS_DOWN);
}
}, 500);
}
}.start();
}