gpt4 book ai didi

android - 什么更好: @SuppressLint or @TargetApi?

转载 作者:IT老高 更新时间:2023-10-28 13:04:40 28 4
gpt4 key购买 nike

我的应用程序中有关于 StrictMode 的问题,并添加了基本上禁用 StrictModeHelper 的代码 fragment 。但是,Lint 现在提示 setThreadPolicy() 并建议添加

@SuppressLint 'NewApi'

@TargetApi(Build.VERSION_CODES.GINGERBREAD)

到 View 的 onCreate() 事件。

首选哪种方法..或者他们基本上都在做同样的事情?

最佳答案

I have issues in my app regarding StrictMode and added the code snippet that basically disables the StrictModeHelper

请修复网络错误。

Which method is prefered ..or are they basically doing the same?

@TargetApi@SuppressLint 具有相同的核心作用:它们抑制 Lint 错误。

不同之处在于,使用 @TargetApi 时,您通过参数声明您在代码中处理的 API 级别,这样如果您稍后将方法修改为尝试引用比 @TargetApi 中引用的 API 级别更新的内容。

例如,假设您没有阻止关于网络错误的 StrictMode 投诉,而是尝试解决 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,Lint 不会投诉。在这种情况下,这是可行的。但是,如果我修改此方法以引用直到 API 级别 14 才添加的内容,则 Lint 错误将再次出现,因为我的 @TargetApi(11) 注释说我只修复了代码适用于 API 级别 11 和 below 以上,而不是 API 级别 14 和 below 以上。

使用 @SuppressLint('NewApi'),我会丢失 any API 级别的 Lint 错误,无论我的代码引用什么以及我的代码设置什么处理。

因此,@TargetApi 是首选注释,因为它允许您以更细粒度的方式告诉构建工具“好的,我修复了此类问题”。

关于android - 什么更好: @SuppressLint or @TargetApi?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14341042/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com