Android lint SharedPreferences.Editor.apply() предупреждение

Я обновился до последней версии Android SDK Tools (23.0.0), Platform-tools (20.0.0), плагина Android Studio Gradle (0.12.+), и вдруг я получаю странный отчет о проблеме Lint, в котором говорится, что я должен использовать apply( ) вместо commit(), так как apply() является асинхронным и позволит продолжить поток пользовательского интерфейса, поскольку commit() будет блокировать его для записи. Прохладный. Но все же я получаю это:

введите здесь описание изображения

Это ошибка Lint, или я что-то упустил?

Очевидно, я мог бы подавить это предупреждение, но я считаю его бессмысленным и не знающим основной причины.

РЕДАКТИРОВАТЬ: Это также будет возникать при создании приложения из командной строки.


person Maciej Pigulski    schedule 02.07.2014    source источник
comment
Я думаю, это ошибка. Попробуйте разбить выражение с длинной точкой на несколько строк - присвоить локальную переменную, поместить одну строку, поместить вторую строку и применить   -  person Eugen Martynov    schedule 02.07.2014
comment
Пробовал так, не получилось. Тем не менее, если бы это сработало, то это был бы обходной путь для удовлетворения предупреждения Lint без какой-либо реальной выгоды для читаемости кода.   -  person Maciej Pigulski    schedule 02.07.2014


Ответы (1)


Это действительно ошибка Lint. В частности, этого.

Похоже, ошибка связана с внутренним классом CommitFinder SharedPrefsDetector:

@Override
public boolean visitMethodInvocation(MethodInvocation node) {
    ...
    String name = node.astName().astValue();
    boolean isCommit = "commit".equals(name);
    if (isCommit || "apply".equals(name)) {
        ...

        if (returnValueIgnored) {
            String message = "Consider using apply() instead; commit writes "
                    + "its data to persistent storage immediately, whereas "
                    + "apply will handle it in the background";
            mContext.report(ISSUE, node, mContext.getLocation(node), message,
                                null);
        }

Я предполагаю, что идея состояла в том, чтобы дать это предупреждение только если вы не присвоили возвращаемое значение commit() чему-либо (эта часть работает), но они забыли проверить флаг isCommit. :)

person matiash    schedule 06.07.2014
comment
Скажите здесь: issuetracker.google.com/issues/36998746, что исправили и выпустили. . Что мне нужно обновить, чтобы получить исправление? - person giorgos.nl; 13.03.2018