アプリにStrictMode
に関する問題があり、StrictModeHelper
を基本的に無効にするコードスニペットを追加しました。しかし、LintはsetThreadPolicy()
について今文句を言い、追加することを提案します
@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)
を持っているということは、Android:minSdkVersion
よりも新しいものを使用していることをLintが検出した場合でも、APIレベル11までは、Lintは文句を言いません。この場合、それは機能します。ただし、APIレベル14まで追加されなかったものを参照するようにこのメソッドを変更した場合、@TargetApi(11)
アノテーションはAPIレベル11で動作するようにコードを修正したことを示すため、Lintエラーが再び表示されますそして 未満 上記、APIレベル14ではなく 未満 上記。
@SuppressLint('NewApi')
を使用すると、any APIレベルのLintエラーが失われます。これは、コードが参照するものや処理するコードの設定に関係ありません。
したがって、@TargetApi
が推奨される注釈です。これにより、ビルドツールに「OK、このカテゴリの問題を修正しました」と、よりきめ細かく伝えることができます。