安卓lint警告:SharedPreferences.Editor.apply()

6
我已经更新到最新的Android SDK工具(23.0.0),平台工具(20.0.0),Android Studio Gradle插件(0.12.+),突然间我收到了一个奇怪的Lint问题报告,说我应该使用apply()而不是commit(),因为apply()是异步的,允许UI线程继续进行,而commit()将阻塞它进行写操作。很棒。但我仍然遇到了这个问题:

enter image description here

这是一个Lint bug吗,还是我漏掉了什么?
显然,我可以抑制此警告,但我发现这样做毫无意义,也忽略了根本原因。
编辑:从命令行构建应用程序时,也会引发此问题。

我认为这是一个bug。尝试将您的长“点”表达式拆分成几行 - 分配本地变量,放置一个字符串,放置第二个字符串并应用。 - Eugen Martynov
尝试过了,但没用。即使它能够工作,那也只是一种解决方案,没有任何实际的好处来提高代码的可读性。 - Maciej Pigulski
1个回答

5
这是一个Lint bug,确实如此。更具体地说,是这个问题
错误似乎出现在SharedPrefsDetectorCommitFinder内部类中:
@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标志。 :)

这里说:https://issuetracker.google.com/issues/36998746 他们已经修复并发布了。我需要更新什么才能得到修复? - giorgos.nl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接