有什么更好的:@SuppressLint或@TargetApi?

我在我的应用程序有关StrictMode问题,并添加了基本禁用StrictModeHelper的代码片段。 然而,Lint现在抱怨setThreadPolicy()并build议添加

 @SuppressLint 'NewApi' 

要么

 @TargetApi(Build.VERSION_CODES.GINGERBREAD) 

到视图的onCreate()事件。

哪种方法是最好的..或者他们基本上是一样的?

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

请修复networking错误。

哪种方法是最好的..或者他们基本上是一样的?

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

不同之处在于,通过@TargetApi ,你可以通过参数声明你在代码中处理了什么API级别,这样如果你稍后修改方法来引用比API级别更新的API @TargetApi

例如,假设不是阻止StrictMode关于networking错误的抱怨,而是尝试解决在较新版本的Android上被序列化的AsyncTask问题。 在代码中有这样的方法来select新设备上的线程池,并在旧设备上使用默认的multithreading行为:

  @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)意味着,如果林特检测到我使用的东西比我的android:minSdkVersion ,但直到API级别11,林特不会抱怨。 在这种情况下,这是有效的。 但是,如果我修改了这个方法来引用一些直到API Level 14之前没有添加的东西,那么Lint错误会再次出现,因为我的@TargetApi(11)注解说我只修复了API Level 11和以上所述,而不是API等级14及以上。

使用@SuppressLint('NewApi') ,我将失去任何 API级别的Lint错误,无论我的代码是什么引用以及我的代码是如何设置的。

因此, @TargetApi是首选的注释,因为它允许您以更精细的方式告诉构build工具“好的,我解决了这类问题”。