Консоль разработчика ANR - PullRequest
0 голосов
/ 26 июня 2018

В моей консоли разработчика в разделе «ANR» я могу увидеть отчет о моем приложении. Есть один, который привлекает мое внимание, я не понимаю, как решить предложенную проблему:

enter image description here

Это код функции insertIntoLastPositionKnown:

public synchronized void insertIntoLastPositionKnown(Location coordinate, Context context) {
        if (mdb == null)

        mdb = mdbHelper.getWritableDatabase();

    try {
        if (coordinate != null) {
            Cursor c = freeQuery("SELECT * FROM " + TABLE_LAST_POSITION);
            if (c != null) {
                c.moveToFirst();
                if (c.getCount() >= 4) {
                    mdb.execSQL("DELETE FROM " + TABLE_LAST_POSITION + " WHERE idPosition = (SELECT idPosition FROM " + TABLE_LAST_POSITION + " ORDER BY time ASC LIMIT 1)");
                }
                c.close();
            }

            //Inserisco la nuova coordinata
            ContentValues values = new ContentValues();
            values.put("latitude", coordinate.getLatitude());
            values.put("longitude", coordinate.getLongitude());
            values.put("accuracy", coordinate.getAccuracy());
            values.put("speed", coordinate.getSpeed());
            values.put("time", coordinate.getTime());
            values.put("insDate", new SimpleDateFormat("dd/MM/yyyy HH:mm:ss", new Locale("it_IT")).format(new Date()));
            values.put("provider", coordinate.getProvider());
            values.put("networkClass", new Utils(context).getNetworkClass());
            mdb.insert(TABLE_LAST_POSITION, "", values);
        }
    } catch (Exception e) {
        wil.WriteFile("203)DbGest - Exception: " + e.toString());
    }
}

Какова может быть природа этой проблемы?

1 Ответ

0 голосов
/ 26 июня 2018

Функция insertIntoLastPositionKnown выполняется в потоке пользовательского интерфейса. Большинство операций ввода-вывода должны выполняться в рабочем потоке, чтобы они не блокировали пользовательский интерфейс. Блокировка пользовательского интерфейса приводит к тому, что пользователь перестает отвечать на запросы, и в конечном итоге Android убьет ваше приложение.

Вместо выполнения ввода-вывода в потоке пользовательского интерфейса вы можете использовать AsyncTask или аналогичный механизм.

Смотрите здесь для получения дополнительной информации о ANR: https://developer.android.com/topic/performance/vitals/anr

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...