ฉันมีปัญหาในแอปของฉันเกี่ยวกับ StrictMode และได้เพิ่มข้อมูลโค้ดที่ปิดการใช้งาน StrictModeHelper โดยทั่วไป
โปรดแก้ไขข้อบกพร่องของระบบเครือข่าย
ชอบวิธีไหน.. หรือโดยพื้นฐานแล้วจะทำเหมือนกัน?
@TargetApi
และ@SuppressLint
มีผลกระทบหลักเหมือนกัน: พวกเขาระงับข้อผิดพลาด Lint
ความแตกต่างคือมี@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 ผ้าสำลีจะไม่บ่น ในกรณีนี้ใช้งานได้ อย่างไรก็ตามหากฉันแก้ไขวิธีนี้เพื่ออ้างอิงสิ่งที่ไม่ได้เพิ่มจนกว่า API ระดับ 14 ข้อผิดพลาด Lint จะปรากฏขึ้นอีกครั้งเนื่องจาก@TargetApi(11)
คำอธิบายประกอบของฉันบอกว่าฉันแก้ไขโค้ดให้ทำงานบน API ระดับ 11 และต่ำกว่าเท่านั้นไม่ใช่ API ระดับ 14 และด้านล่างดังกล่าวข้างต้น
เมื่อใช้@SuppressLint('NewApi')
ฉันจะสูญเสียข้อผิดพลาด Lint สำหรับระดับ API ใด ๆไม่ว่าโค้ดของฉันจะอ้างอิงถึงอะไรและโค้ดของฉันถูกตั้งค่าให้จัดการกับอะไร
ดังนั้นจึง@TargetApi
เป็นคำอธิบายประกอบที่ต้องการเนื่องจากช่วยให้คุณสามารถบอกเครื่องมือสร้างว่า "ตกลงฉันแก้ไขปัญหาประเภทนี้แล้ว" ในรูปแบบที่ละเอียดยิ่งขึ้น