回答:
アプリにStrictModeに関する問題があり、基本的にStrictModeHelperを無効にするコードスニペットを追加しました
ネットワークのバグを修正してください。
どの方法が推奨されますか、または基本的に同じことをしていますか?
@TargetApi
そして、@SuppressLint
同じコア効果を持っている:彼らはリントエラーを抑えます。
違いは、を@TargetApi
使用して、コードで対処したAPIレベルをパラメーターを介して宣言するため、後でメソッドを変更して、で引用されているAPIレベルよりも新しいものを参照しようとした場合にエラーが再び表示されることです@TargetApi
。
たとえばStrictMode
、ネットワークのバグに関する苦情をブロックするのではなくAsyncTask
、Androidの新しいバージョンでシリアル化される問題を回避しようとしていたとしましょう。新しいデバイスでスレッドプールにオプトインし、古いデバイスでデフォルトのマルチスレッド動作を使用するコードには、次のようなメソッドがあります。
@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まで、lintは文句ないでしょうが。この場合、それは機能します。ただし、APIレベル14まで追加されなかったものを参照するようにこのメソッドを変更した場合、Lintエラーが再び表示されます。これは、私の@TargetApi(11)
注釈では、APIレベル11 以下で機能するようにコードを修正しただけで、上記のAPIレベル14 以下。
使用して@SuppressLint('NewApi')
、私はのためリントエラーを失うことになる任意の関係なく、どのような私のコードの参照と何私のコードは、ハンドルに設定されているのは、APIレベル。
したがって、@TargetApi
は推奨される注釈です。これにより、ビルドツールに「OK、このカテゴリの問題を修正しました」をよりきめ細かく伝えることができます。