我在我的应用程序中有关于StrictMode
的问题,并添加了基本禁用StrictModeHelper
的代码片段。然而,现在皮棉抱怨setThreadPolicy()
并提出以添加有什么更好的:@SuppressLint或@TargetApi?
@SuppressLint 'NewApi'
或
@TargetApi(Build.VERSION_CODES.GINGERBREAD)
到onCreate()
事件的看法。
哪种方法是首选..或者他们基本上是一样的?
我在我的应用程序中有关于StrictMode
的问题,并添加了基本禁用StrictModeHelper
的代码片段。然而,现在皮棉抱怨setThreadPolicy()
并提出以添加有什么更好的:@SuppressLint或@TargetApi?
@SuppressLint 'NewApi'
或
@TargetApi(Build.VERSION_CODES.GINGERBREAD)
到onCreate()
事件的看法。
哪种方法是首选..或者他们基本上是一样的?
我有问题,我就StrictMode的应用程序,并添加代码片段,基本上禁止StrictModeHelper
请修正网络错误。
哪种方法是首选的?或者他们基本上是一样的吗?
@TargetApi
和@SuppressLint
具有相同的核心作用:它们抑制Lint错误。
区别在于,通过@TargetApi
,您可以通过参数声明代码中已处理的API级别,以便稍后修改该方法以尝试引用比API更新的东西时,该错误可以再次弹出级别在@TargetApi
中引用。
例如,假设您没有阻止关于您的网络问题的StrictMode
投诉,而是尝试解决在较新版本的Android上序列化为AsyncTask
的问题。你必须在你的代码这样的方法来选择到较新设备上的线程池,使用默认的多线程行为对旧设备:
@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,林特不会抱怨。在这种情况下,这是有效的。但是,如果我修改此方法以引用在API级别14之前未添加的内容,则将再次出现Lint错误,因为我的@TargetApi(11)
注释表示我只修复了API级别11和
以下的代码,并且在
以下以上,而不是以上的以下的API级别14和
。
使用@SuppressLint('NewApi')
,无论我的代码引用以及我的代码是如何处理的,我都将失去Lint错误的任何 API级别。
因此,@TargetApi
是首选注释,因为它允许您以更精细的方式告诉构建工具“好的,我解决了这类问题”。
我知道,使用异步方法将是可取的,只是在我的特殊情况下,我会坚持解决方法。感谢这个详细而且非常容易理解的解释 - 在这个机会中,还要感谢你非常有用的网页,这帮助我理解了Android编程的一些概念! R. – richey
@richey:“就我个人而言,我会坚持解决方法” - 这不是一个好主意。移动设备是移动设备。网络连接相当不稳定,并且在各种情况下可能花费更多时间(例如,弱信号)。在主应用程序线程上执行网络I/O意味着您的应用程序将在现场随机与ANR崩溃。 – CommonsWare
哇,你的代码示例是我试图编写的EXACT代码!真是巧合:) –