有什么更好的:@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工具“好的,我解决了这类问题”。