2011-12-09 28 views
35

Tôi thấy khá một số good old useful methods hoặc thậm chí toàn bộ các lớp học "không được dùng nữa và lỗi thời"."Phương pháp này không được chấp nhận" có nghĩa là gì đối với nhà phát triển ứng dụng

Nhưng mã được sử dụng để gọi những phương thức đó vẫn tiếp tục hoạt động. Vậy, điều này có ý nghĩa gì đối với tôi, với tư cách là một nhà phát triển ứng dụng Android?

  1. Tiếp tục sử dụng phương pháp này chừng nào tôi muốn, bởi vì SDK mới hơn sẽ luôn vẫn tương thích ngược.
  2. Nó sẽ hoạt động miễn là tôi xây dựng cho các mục tiêu cũ hơn (ví dụ: API 8), nhưng nếu tôi xây dựng từ API 14 lên, trình biên dịch sẽ từ chối hoàn thành bản dựng.
  3. Cả hai (1) và (2)
  4. Khác?

Điều này đặc biệt khó hiểu khi không có lựa chọn thay thế nào, như trong trường hợp WebView.PictureListener.html#onNewPicture.

+5

Nó có nghĩa là một nhức đầu mới nếu ý định của bạn là để trang trải số lượng tối đa các thiết bị có thể và bạn không muốn loại trừ những người dùng có một số "đã lỗi thời" điện thoại. – jap1968

Trả lời

24

Điều này thường có nghĩa là có cách tốt hơn để làm việc hoặc chức năng không được chấp nhận có một số lỗ hổng không thể khắc phục và cần tránh. Bạn có thể thường là tiếp tục sử dụng các phương pháp không dùng nữa, nhưng bạn nên chuyển sang một số API mới (trong trường hợp đầu tiên) hoặc tìm cách khác để thực hiện những gì bạn muốn (trong lần thứ hai).

Nói riêng về onNewPicture, toàn bộ giao diện PictureListener không được chấp nhận. Không có dấu hiệu của cái gì, nếu có, được cho là sẽ thay thế nó. Một bình luận bằng @CommonsWare trong this thread là thực phẩm cho rằng:

Có thể hiểu rằng những thay đổi ở thượng nguồn trong WebKit đang lái xe việc không dùng và hỗ trợ cho PictureListener có thể hoàn toàn bị mất trong một số phiên bản trong tương lai.

+0

Những gì bạn (và những người khác) nói có ý nghĩa, nhưng rất khó để hiểu được điều này khi không có cách thay thế hoặc một cách tốt hơn được đề xuất ở đâu "Phương pháp này không được chấp nhận. Phương pháp này hiện đã lỗi thời." được tìm thấy trong tài liệu. – an00b

+1

@ an00b - Tôi đồng ý rằng trường hợp này rất khó. Xem phần thứ hai của câu trả lời của tôi, mà tôi thấy tôi đã thêm vào chính xác cùng một giây bạn đã đăng bình luận của mình. –

+0

Cảm ơn bạn đã liên kết tới nhận xét của CommonsWare. Tôi đặt cược 'onNewPicture' đã không được chấp nhận do xu hướng của các trang web lạm dụng Javascript bằng cách gửi hàng trăm bản cập nhật mỗi giây để phân phối quảng cáo cuộn ... – an00b

13

Tôi sẽ đi với 4:

Về cơ bản nó sẽ cho bạn biết rằng việc sử dụng phương pháp hoặc lớp học không được khuyến khích; nó không phải là 100% rằng họ sẽ giữ tính tương thích ngược (họ có thể quyết định không bao gồm phương thức đó trong các bản phát hành trong tương lai), vì vậy bạn nên cố gắng sử dụng thay thế phương thức hoặc lớp. Đây là đôi khi không thể sử dụng các phương pháp mới (ví dụ: nếu bạn muốn hỗ trợ các thiết bị chạy phiên bản cũ hơn).

Một số thời điểm khác thực sự có thể. Ví dụ: phương thức showDialog hiện không còn được dùng nữa và chúng khuyên bạn nên sử dụng lớp DialogFragment. Bạn có thể đạt được điều đó ngay cả trong các phiên bản Android cũ hơn bằng cách sử dụng compatibility library.

+6

Cảm ơn. Tôi là một anh chàng nhị phân (1 hoặc 0), vì vậy tôi không thực sự hiểu các khái niệm như "chán nản", "không phải 100%", "đôi khi" và "thử sử dụng thay thế" khi ** không có thay thế ** . Tôi bị bối rối. 1 tuy nhiên. :) – an00b

+0

Thông thường, khi bạn nhìn thấy một phương pháp không dùng nữa, nó sẽ cho bạn biết bạn nên sử dụng phương pháp nào khác. Tham khảo ví dụ 'showDialog' ở trên. – Cristian

8

Phương thức không được chấp nhận không được đảm bảo duy trì tính tương thích ngược. Họ có thể vẫn còn ở đó cho một vài bản phát hành nữa chỉ để cho mọi người cơ hội di chuyển ra khỏi họ trước khi các nhà phát triển loại bỏ chúng. Thực tế là họ không được chấp nhận có nghĩa là các nhà phát triển nghĩ rằng có một cách dễ dàng hơn, nhanh hơn, gọn gàng hơn hoặc tốt hơn để làm bất cứ điều gì mà lớp hoặc phương pháp làm.

Có thể tốt hơn khi thay đổi mã của bạn để sử dụng giao diện không được chấp nhận ngay bây giờ, vì nếu bạn đợi và nó bị xóa, người dùng của bạn sẽ thấy sự cố và lỗi.

+0

cũng +1 cho bạn. Xem bình luận của tôi với Ted Hopp. – an00b

3

Ngay cả khi không dùng nữa, chúng có thể biên dịch nhưng không hoạt động. Google đã quyết định xóa chức năng khác nhau ở cấp hệ điều hành thấp.

Trường hợp tại điểm. Google, ở bản phát hành Android 2.3 đã không dùng nhiều nhưng không phải tất cả API của phương thức cho phép ghi âm cuộc gọi. Họ biên dịch OK nhưng không hoạt động kể từ Android 2.3 và chuyển tiếp trên mọi thiết bị điện thoại Android hoặc máy tính bảng có khả năng của điện thoại.

2

Ví dụ về giao diện không dùng nữa đã bị xóa ở cấp API sau, hãy xem gói org.apache.http: Đã là deprecated in API level 22removed in API level 23. Tất nhiên trên các thiết bị Android thực tế, các lớp chứa trong gói đó sẽ vẫn có sẵn trong thư viện hệ thống (nếu không, các ứng dụng nhắm mục tiêu một bản phát hành Android cũ hơn sẽ không còn chạy trên thiết bị đó) nữa.

Tuy nhiên, chúng không còn khả dụng trong SDK nữa, vì vậy hãy biên soạn will fail trừ khi bạn thay đổi SDK mục tiêu/xây dựng thành phiên bản cũ hơn (hoặc bao gồm các lớp không dùng nữa theo cách thủ công).

Nếu Google thực sự quyết tâm không khuyến khích sử dụng các thư viện đó, họ có thể sửa đổi triển khai để các lớp bị ảnh hưởng kiểm tra phiên bản API đích của ứng dụng đang chạy và khiếu nại và/hoặc ném ngoại lệ thời gian chạy.

Các vấn đề liên quan