Uygulamamda StrictMode ile ilgili sorunlar yaşıyorum ve StrictModeHelper'ı temelde devre dışı bırakan kod pasajını ekledim
Lütfen ağ iletişimi hatasını düzeltin.
Hangi yöntem tercih edilir .. yoksa temelde aynı şeyi mi yapıyorlar?
@TargetApi
ve @SuppressLint
aynı temel etkiye sahiptirler: Lint hatasını bastırırlar.
Aradaki fark, @TargetApi
parametre aracılığıyla, kodunuzda hangi API düzeyini ele aldığınızı belirtmenizdir, böylece daha sonra, belirtilen API düzeyinden daha yeni bir şeye başvurmayı denemek için yöntemi değiştirirseniz, hata tekrar ortaya çıkabilir @TargetApi
.
Örneğin, StrictMode
ağ iletişimi hatanızla ilgili şikayetleri engellemek yerine AsyncTask
, Android'in daha yeni sürümlerinde serileştirme sorununu çözmeye çalıştığınızı varsayalım . Daha yeni cihazlarda iş parçacığı havuzunu seçmek ve eski aygıtlarda varsayılan çok iş parçacıklı davranışı kullanmak için kodunuzda buna benzer bir yönteminiz var:
@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);
}
}
Sahip olmak @TargetApi(11)
demektir ki, Lint benimkinden daha yeni bir şey kullandığımı algılarsa android:minSdkVersion
, ancak API Seviye 11'e kadar Lint şikayet etmeyecektir. Bu durumda işe yarıyor. Bununla birlikte, bu yöntemi API Düzeyi 14'e kadar eklenmemiş bir şeyi referans alacak şekilde değiştirirsem, Lint hatası tekrar görünür, çünkü @TargetApi(11)
ek açıklamam, kodu yalnızca API Düzeyi 11 ve altında çalışacak şekilde düzelttiğimi söylüyor , değil API Seviye 14 ve aşağıda yukarıda.
Kullanarak @SuppressLint('NewApi')
, kod referanslarımın ve kodumun işlemek için ne ayarlandığına bakılmaksızın, herhangi bir API seviyesi için Lint hatasını kaybedebilirim .
Bu nedenle, @TargetApi
derleme araçlarına daha ayrıntılı bir şekilde "Tamam, bu sorun kategorisini düzelttim" demenize izin verdiği için tercih edilen ek açıklamadır.