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

#android #gradle #lint

#Android #gradle #lint

Вопрос:

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

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

Это ошибка Lint, или я что-то здесь упускаю?

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

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

Комментарии:

1. Я думаю, что это ошибка. Попробуйте разделить ваше длинное выражение «точка» на несколько строк — назначение локальной переменной, поместите одну строку, поместите вторую строку и примените

2. Пробовал, не сработало. Тем не менее, если бы это сработало, это было бы обходным путем для удовлетворения предупреждения Lint без какой-либо реальной выгоды для удобства чтения кода.

Ответ №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 (эта часть работает), но они забыли поставить флажок. 🙂

Комментарии:

1. Здесь говорится: issuetracker.google.com/issues/36998746 что они исправили это и выпустили. Что мне нужно обновить, чтобы получить исправление?