Answers:
我的应用程序中存在有关StrictMode的问题,并添加了基本上禁用StrictModeHelper的代码段
请修复网络错误。
首选哪种方法..或者他们基本上是一样的吗?
@TargetApi
并@SuppressLint
具有相同的核心效果:它们抑制Lint错误。
不同之处在于,通过@TargetApi
,您可以通过参数声明代码中已解决的API级别,因此,如果您以后修改该方法以尝试引用比参考的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
它是首选的注释,因为它允许您以更细粒度的方式告诉构建工具“好,我已修复此类问题”。