Tôi gặp sự cố trong ứng dụng của mình liên quan đến Chế độ nghiêm ngặt và đã thêm đoạn mã về cơ bản vô hiệu hóa Chế độ nghiêm ngặt
Vui lòng sửa lỗi mạng.
Phương pháp nào được ưu tiên hơn .. hay về cơ bản chúng đều làm giống nhau?
@TargetApi
và @SuppressLint
có cùng tác dụng cốt lõi: chúng ngăn chặn lỗi Lint.
Sự khác biệt là @TargetApi
bạn khai báo, thông qua tham số, cấp API nào bạn đã giải quyết trong mã của mình, do đó lỗi có thể xuất hiện trở lại nếu sau đó bạn sửa đổi phương pháp để thử tham chiếu đến thứ gì đó mới hơn cấp API được trích dẫn trong đó @TargetApi
.
Ví dụ: giả sử rằng, thay vì chặn các StrictMode
khiếu nại về lỗi mạng của bạn, bạn đang cố gắng giải quyết vấn đề AsyncTask
được đăng nhiều kỳ trên các phiên bản Android mới hơn. Bạn có một phương thức như thế này trong mã của mình để chọn tham gia nhóm luồng trên các thiết bị mới hơn và sử dụng hành vi đa luồng mặc định trên các thiết bị cũ hơn:
@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);
}
}
Có @TargetApi(11)
nghĩa là nếu Lint phát hiện ra rằng tôi đang sử dụng thứ gì đó mới hơn của tôi android:minSdkVersion
, nhưng lên đến API Cấp 11, Lint sẽ không phàn nàn. Trong trường hợp này, điều đó hoạt động. Tuy nhiên, nếu tôi sửa đổi phương pháp này để một cái gì đó tài liệu tham khảo mà không được thêm vào cho đến khi API cấp 14, sau đó các lỗi Lint sẽ xuất hiện trở lại, bởi vì tôi @TargetApi(11)
chú thích nói rằng tôi chỉ cố định mã để làm việc trên API Level 11 và dưới trên, không API Level 14 và dưới trên.
Sử dụng @SuppressLint('NewApi')
, tôi sẽ mất lỗi Lint cho bất kỳ cấp API nào , bất kể mã của tôi tham chiếu gì và mã của tôi được thiết lập để xử lý.
Do đó, @TargetApi
là chú thích được ưu tiên hơn, vì nó cho phép bạn nói với các công cụ xây dựng "OK, tôi đã khắc phục danh mục vấn đề này" theo cách chi tiết hơn.