100

我的应用程序中有关于StrictMode并添加了基本上禁用StrictModeHelper. 但是,Lint 现在抱怨setThreadPolicy()并建议添加

@SuppressLint 'NewApi'

或者

@TargetApi(Build.VERSION_CODES.GINGERBREAD)

onCreate()视图的事件。

哪种方法是首选..或者他们基本上是在做同样的事情?

4

1 回答 1

177

我的应用程序中有关于 StrictMode 的问题,并添加了基本上禁用 StrictModeHelper 的代码片段

请修复网络错误。

哪种方法是首选..或者他们基本上是在做同样的事情?

@TargetApi@SuppressLint具有相同的核心效果:它们抑制了 Lint 错误。

不同之处在于@TargetApi,您可以通过参数声明您在代码中处理的 API 级别,这样如果您稍后修改方法以尝试引用比@TargetApi.

例如,假设您没有阻止StrictMode有关您的网络错误的投诉,而是尝试解决AsyncTask在较新版本的 Android 上被序列化的问题。您的代码中有这样的方法可以选择进入较新设备上的线程池并在旧设备上使用默认多线程行为:

  @TargetApi(11)
  static public <T> void executeAsyncTask(AsyncTask<T, ?, ?> task,
                                          T... params) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
      task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
    }
    else {
      task.execute(params);
    }
  }

拥有@TargetApi(11)意味着如果 Lint 检测到我使用的东西比我的 更新android:minSdkVersion,但达到 API 级别 11,Lint 不会抱怨。在这种情况下,这是可行的。但是,如果我修改此方法以引用在 API 级别 14 之前未添加的内容,则 Lint 错误将再次出现,因为我的@TargetApi(11)注释说我只修复了代码以在 API 级别 11 及更高级别工作,而不是API 级别 14 及以下

使用,无论我的代码引用什么以及我的代码设置为处理什么@SuppressLint('NewApi'),我都会丢失任何API 级别的 Lint 错误。

因此,@TargetApi首选注释,因为它允许您以更细粒度的方式告诉构建工具“好的,我修复了此类问题”。

于 2013-01-15T16:30:23.517 回答