android.annotationパッケージのTargetApiとSuppressLint注記


ここにいるよannotationパッケージには2つの注記があります:1、TargetApi 2、SuppressLint
TargetApi
TargetApi注釈はTYPE,METHOD,CUSTRUCTORの上で使用でき,我々のアプリケーションのandroid:minSdkVarsionが8である場合,我々は1つの方法で11のAPIを使用し,Lintがエラーを提示しないようにすることを望んでいるが,我々はこの方法で注釈@TargetApi(11)を使用することができ,この方法で11以下のAPIを使用することができ,またLintはエラーを提示しません.一般的な使い方は以下の通りです.
@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:minSdkValersonは8ですが、11バージョンのAPIを使用でき、Lintはエラーが発生しませんが、実行時にエラーが発生しないように注意する必要があります.APIが8のマシンで実行していますが、11バージョンのAPIを使用している場合は、プログラムはcrashになるに違いありません.したがって、低バージョンシステムでは高バージョンメソッドは呼び出されないが、機能の完全性を保証するためには、低APIバージョンで他の方法で機能を実現する必要があるというシステムバージョンの判断が必要である.注記の目的は,Lintの静的検出を無視してコンパイル可能にすることである.SuppressLintの上の効果も@SuppressLint('NewApi')を使用することができ、その名の通り、新しいAPIを使用することができ、Lintの静的検出を無視することができることを示していますが、@SuppressLint('NewApi')を使用した後、どのレベルのAPIを使用してもLintはエラーを提示しません.しかし,メソッドではバージョン判定を行うことができず,メソッド呼び出しがどのレベルのAPIであるか分からないため,@TargetApi(11)が異なり,メソッドは11バージョン未満のAPIしか呼び出せないことを明確に指定したので,バージョン判定を行うことができる.