Правильное использование yieldIfContendedSafely () в Многопоточное приложение Android

В моем приложении Я использую AsyncTask для записи некоторых данных в базу данных в транзакции. Доступ к этой базе данных также осуществляется из потока пользовательского интерфейса. Просматривая доступные методы базы данных, я наткнулся на yieldIfContendedSafely () . Похоже, что этот метод следует использовать во всех случаях, когда транзакция выполняется из отдельного потока. Но вряд ли существует какая-либо документация по этому методу, кроме следующего:

Временно завершите транзакцию, чтобы позволить другим потокам работать. Пока что транзакция считается успешной. Не вызывайте setTransactionSuccessful перед этим. Когда это вернет, новая транзакция будет создана, но не помечена как успешная. Предполагается, что вложенных транзакций нет ( beginTransaction был вызван только один раз), и будет генерировать исключение, если это не так.

Вот как я предполагаю, что вы использовали бы этот метод из ветка:

        try {
        db.beginTransaction();
        //insert some stuff into the database here 
        ...



        // is this how you use this method?
        boolean yielded = db.yieldIfContendedSafely();
        if (yielded) {
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }



        db.setTransactionSuccessful();
    } catch (SQLException e) {
        return false;
    } finally {
        db.endTransaction();
        db.close();
    }

Это правильный способ использования этого метода? Можно ли использовать db.yieldIfContendedSafely () более одного раза в одной транзакции между несколькими записями в разные таблицы в базе данных? Есть предложения?

7
задан Razor 18 October 2016 в 21:43
поделиться