我在我的应用程序中遇到了StrictMode的问题,并添加了代码片段,基本上禁用了StrictModeHelper
请修复网络错误。
哪种方法更好..或者它们基本上做相同的事情?
@TargetApi
和@SuppressLint
具有相同的核心效果:它们抑制Lint错误。
区别在于,使用@TargetApi
时,您通过参数声明您在代码中已经解决了哪个API级别,因此如果以后修改了该方法并尝试引用比@TargetApi
中引用的API级别更新的内容,则错误可能会再次弹出。
例如,假设您正在尝试解决AsyncTask在较新版本的Android上被序列化的问题,而不是阻止关于网络错误的StrictMode
投诉。 您在代码中有一个类似于以下内容的方法,以便在较新设备上选择线程池并在旧设备上使用默认的多线程行为:
@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
是首选的注释,因为它允许您以更细粒度的方式告诉构建工具“好的,我已经修复了这类问题”。