У меня работает Android игра, которая иногда принудительно закрывается на медленных устройствах с ошибкойAndroid фатальный сигнал 6 (SIGABRT) от AsyncTask
фатальный сигнал 6 (SIGABRT), код -6 в TID 14620 (AsyncTask # 1)
Исследование показало мне, что это было связанно с задерживая выполнение потока пользовательского интерфейса, так что, я укутан миру коды (около 200 строк растрового изображения и создания области) в качестве (метод AsyncTask doInBackground), и теперь я запускаю эту задачу из потока пользовательского интерфейса, используя task.execute.
Проблема в том, что это никоим образом не остановило ошибку. Если что-то усилие приложения закрывается чаще во время выполнения этого кода, несмотря на то, что он должен работать в asyncTask.
В интересах быть тщательным, ошибка вызывается во время выполнения этой части кода (выписка из 200ish блока):
Back.outerPath.setFillType(Path.FillType.EVEN_ODD);
Region tempRegion = new Region(PathBoundsRectangle);
Back.outerRegion.setPath(Back.outerPath, tempRegion);
Back.innerRegion.setPath(Back.innerPath, tempRegion);
Back.fastRegion.setPath(Back.speedPath, tempRegion);
Back.slowRegion.setPath(Back.slowPath, tempRegion);
Back.outerRegion.op(Back.innerRegion, Region.Op.XOR);
Matrix scaleMatrix = new Matrix();
RectF rectF = new RectF();
Back.innerPath.computeBounds(rectF, true);
scaleMatrix.setScale(1.1f, 1.1f,rectF.centerX(),rectF.centerY());
Back.innerPath.transform(scaleMatrix);
Back.outerPath.computeBounds(rectF, true);
scaleMatrix.setScale(0.9f, 0.9f,rectF.centerX(),rectF.centerY());
Back.outerPath.transform(scaleMatrix);
Back.outerSideBandRegion.setPath(Back.outerPath, tempRegion);
Back.outerSideBandRegion.op(Back.outerRegion, Region.Op.XOR);
Back.innerSideBandRegion.setPath(Back.innerPath, tempRegion);
Back.innerSideBandRegion.op(Back.innerRegion, Region.Op.XOR);
Любые идеи? Возможно ли, что код все еще работает в потоке пользовательского интерфейса? Может ли эта ошибка произойти из-за чего-то еще?
EDIT: Оказывается, ошибка исходит из манипуляций Region.op.XOR. Кто-нибудь видит, как это может привести к фатальной ошибке?
Ваш не делает .get(), вы? – Petro
Нет, не делает .get(). – user3161003
Возможно, вы нажмете ограничение памяти на более старых устройствах, см. Http://stackoverflow.com/questions/3590443/what-is-the-maximum-memory-limits-per-application-for-android-2-2 – Petro