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