Помогите мне - я действительно застрял в следующем вопросе:
Исключение выбрасывается за пределы JVM и не может быть обработано, если вы не знаете NDK.
03-23 17:48:24.463 18768-18913/se.android.appinfo E/Parcel: fcntl(F_DUPFD_CLOEXEC) failed in Parcel::read, i is 0, fds[i] is -1, fd_count is 1, error: Too many open files
03-23 17:48:24.464 18768-18913/se.android.appinfo I/OpenGLRenderer: Surface query width is 1440
03-23 17:48:24.464 18768-18913/se.android.appinfo A/OpenGLRenderer: Failed to set damage region on surface 0x7edceec8c0, error=EGL_BAD_ACCESS
03-23 17:48:24.467 18768-18913/se.android.appinfo A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 18913 (RenderThread)
Полагаю, последние из них об EGL и OpenGL ES актуальны здесь?
Я часами боролся, гуглил и не могу найти решения. И эта проблема для меня в новинку - со мной такого никогда не возникало - я создавал приложения перед использованием Asynctask и отображал диалоги выполнения во время загрузки.
Сбой происходит где-то между основной и фоновой нитями. Это происходит не каждый раз, может быть, 50% или что-то. Когда происходит сбой, когда doInBackground готов или почти готов, и вызывается onPostExecute.
Пожалуйста, обратите внимание на мой источник и помогите мне, если вы подозреваете что-либо, что вызывает исключение (фатальный сигнал).
source - пользовательский класс, расширяющий AsyncTask
public class Async_loader extends AsyncTask <String, Integer, String> implements AppInfoRetriever.ProgressInterface {
private Context context;
private AppInfoRetriever appInfoRetriever;
private ProgressDialog progressDialog;
public Async_loader(Context context, AppInfoRetriever appInfoRetriever) {
this.context = context;
this.appInfoRetriever = appInfoRetriever;
this.appInfoRetriever.setProgressInterface(this);
progressDialog = new ProgressDialog(context);
progressDialog.setCancelable(false);
progressDialog.setIndeterminate(false);
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.show();
}
public String doInBackground(String ... params) {
try {
appInfoRetriever.retrieve();
} catch(PackageManager.NameNotFoundException nnfe) {
nnfe.printStackTrace();
}
appInfoRetriever.splitToUserSystemApps();
return "loading done";
}
@Override
public void onProgressUpdate(final Integer ... values) {
progressDialog.setProgress(values[0]);
progressDialog.setMessage("parsing apps: " + values[0]);
}
public void onPostExecute(String result) {
System.err.println(result);
progressDialog.dismiss();
}
/**
* Callback från AppInfoRetriever
* @param nItems
* @param index
*/
@Override
public void appLoadingProgress(int nItems, int index) {
publishProgress(index);
}
}
Полезно знать: так как я хочу отделить код, я позволил AppInfoRetriever проанализировать приложения и во время синтаксического анализа отправлять (через интерфейс) информацию обратно в Async_loader. Я думал, что это может быть проблемой, но я пытался поднять в коде Async_loader, но безуспешно.