Mảnh vỡ hoặc mảnh vỡ hỗ trợ?


125

Tôi đang phát triển một ứng dụng hỗ trợ Android> = 4.0. Nó sử dụng các mảnh từ android.appgói. Khi tôi gặp vấn đề với việc triển khai phân đoạn cũ hơn trong 4.0, như bản này , đã được sửa trong thư viện hỗ trợ, tôi đang xem xét chuyển trở lại triển khai phân đoạn từ thư viện hỗ trợ để có được triển khai đáng tin cậy và nhất quán hơn.

Ý kiến ​​của bạn như thế nào? Bạn có đang sử dụng các đoạn từ thư viện hỗ trợ, mặc dù chúng đã có sẵn, khi phát triển cho Android 4?


2
Đây là một câu hỏi hay (+1 vì nó khiến tôi tò mò). Ngoài ra không có một lời giải thích tốt trên web cho điều này. Tôi đang sử dụng thư viện hỗ trợ cho ứng dụng của mình và tôi tự hỏi liệu tôi có sai hay không, vì tôi không nhận thấy bất kỳ lỗi nào trong khi biên dịch hoặc trong khi thử nghiệm.
JJ86

2
@animuson Câu trả lời của brillenheini chứng minh rằng đây không phải là câu trả lời chủ yếu dựa trên ý kiến.
OneWorld

Câu trả lời:


90

Từ kinh nghiệm của tôi, sử dụng cùng một triển khai phân đoạn trên tất cả các thiết bị Android là một lợi thế lớn. Tôi không thể thoát khỏi tất cả NullPulumExceptions khi trạng thái được lưu trên Android 4.0 bằng các đoạn gốc, với thư viện hỗ trợ tất cả đều biến mất. Ngoài ra tôi không thể thấy bất kỳ nhược điểm nào cho đến nay với phương pháp này.

Vì vậy, câu trả lời của tôi cho câu hỏi của riêng tôi là ngay bây giờ: Khi phát triển cho Android 4.x, sử dụng các đoạn từ thư viện hỗ trợ là một ý tưởng hay. Thư viện hỗ trợ đã sửa các lỗi vẫn còn trong các triển khai phân đoạn cũ và thường xuyên được cập nhật với nhiều sửa lỗi hơn.


11
Vậy mục đích của android.app.Fragmentlúc đó là gì? Nếu bạn có thể thêm câu này vào câu trả lời của bạn ở đây với một chút giải thích, tôi sẽ hoàn toàn hài lòng. Cảm ơn!
jonstaff

1
@jonstaff Lý do có lẽ là lịch sử. Xin vui lòng xem câu trả lời cập nhật của tôi ở đó.
brillenheini

11
Để hoàn thiện, dường như có những thứ mà các đoạn hỗ trợ không thể làm được (ví dụ như được tạo hình độngobjectAnimator , ngay cả khi hệ điều hành đích thực sự hỗ trợ nó). Điều đó, trong trường hợp bạn đang sử dụng ViewPager, có nghĩa là bạn phải sử dụng các bộ điều hợp từ thư viện hỗ trợ v13, nếu không, bạn không thể có cả chế độ xem và lật hoạt hình.
GSerg

5
Ngoài ra, hãy cẩn thận, kể từ tháng 8 năm 2014, thư viện v13 không thể thực hiện các mảnh vỡ lồng nhau.
Martin Marconcini

1
Tại sao những kẻ tại google đã lựa chọn sử dụng thư viện v13 cho ứng dụng iosched github.com/google/iosched/blob/master/android/src/main/java/com/... , họ phải có một lý do nào
forcewill

40

Một lý do lớn để gắn bó SupportFragmenttrong một thời gian là bạn không có quyền truy cập vào ChildFragmentManagerAPI 17. Thư viện hỗ trợ sẽ cung cấp cho bạn phiên bản hỗ trợ của trình quản lý phân đoạn con.

Điều này trở thành một vấn đề lớn nếu bạn có những mảnh có chứa các mảnh khác. Điều này là phổ biến trong các ứng dụng máy tính bảng có độ phức tạp cao và / hoặc kiến ​​trúc tổng thể của bạn dựa trên bố cục theo thẻ hoặc sử dụng ngăn kéo điều hướng.


21

Tôi cũng cảm thấy thất vọng khi phải bao gồm các thư viện hỗ trợ, mặc dù nhắm mục tiêu Android 4.0+ - nhưng có vẻ như nó được khuyến nghị chính thức:

Gói Thư viện hỗ trợ Android chứa một số thư viện có thể được bao gồm trong ứng dụng của bạn. Mỗi thư viện này hỗ trợ một loạt các phiên bản nền tảng Android và bộ tính năng cụ thể.

Hướng dẫn này giải thích các tính năng quan trọng và hỗ trợ phiên bản do Thư viện hỗ trợ cung cấp để giúp bạn quyết định những tính năng nào bạn nên đưa vào ứng dụng của mình. Nói chung, chúng tôi khuyên bạn nên bao gồm thư viện v4 và thư viện ứng dụng v7 vì chúng hỗ trợ nhiều phiên bản Android và cung cấp API cho các mẫu giao diện người dùng được đề xuất.

http://developer.android.com/tools/support-lvern/features.html


Đây phải là câu trả lời được chấp nhận, mặc dù thực tế là @brillenheini đã tự cung cấp câu trả lời. Nó trả lời câu hỏi với độ chính xác và ngắn gọn nhất.
Arvindh Mani

4

IMHO nếu bạn dự định chỉ phát triển cho 4.0, tôi khuyên bạn nên đi với các thư viện riêng vì tệp thực thi sẽ nhỏ hơn. Đúng là bạn có thể gặp phải các vấn đề về lỗi trong các phiên bản đầu tiên, nhưng tôi nghĩ rằng hầu hết trong số này nên khá tầm thường để khắc phục. Ngoài ra, thư viện tương thích được cho là ánh xạ tới các đoạn gốc trong trường hợp bạn đang chạy trên 4.0 và cao hơn nữa. Vì vậy, cuối cùng bạn có thể phải vật lộn với những loại vấn đề này. Vấn đề với các thư viện hỗ trợ là bạn có rất nhiều lớp xuất hiện gấp 2 lần (một lần trong cấu trúc gói hỗ trợ và một lần trong cấu trúc gói "gốc") khiến cho việc phát triển trở nên cồng kềnh hơn một chút.

Tuy nhiên, nếu bạn cũng muốn phát hành ứng dụng trước 4.0 thì không có cách nào xung quanh thư viện hỗ trợ. Ngoài ra, vì có khoảng 38% tất cả người dùng trên 2.3, có thể có ý nghĩa kinh doanh khi đưa phiên bản HĐH này. Trong trường hợp như vậy, bạn có thể sử dụng thư viện hỗ trợ kết hợp với Jake Wartons ActionBarSherlock (hoặc với googles hỗ trợ Thư viện ActionBar sau khi nó được phát hành cuối cùng).


3
Cảm ơn câu trả lời của bạn. Vì tôi cần ViewPager, dù sao tôi cũng phải bao gồm thư viện hỗ trợ. Ngoài ra, đoạn hỗ trợ không cố gắng chuyển sang triển khai riêng nếu có. Đó là những gì các tài liệu nói.
brillenheini

Vâng, điều này là (như @brillenheini đã nói) rằng để có ViewPager, bạn cần v4, vì vậy ngay cả khi bạn chỉ nhắm mục tiêu các thiết bị v13 +, bạn vẫn có thể hoàn thành việc có v4.
Sotti

Tôi cũng mới phát hiện ra điều đó (ViewPager cần v4) trên API 21 và trên ứng dụng. Meh: - /
mraviator

2

Có vẻ như tốt hơn là sử dụng Thư viện hỗ trợ ngay bây giờ vì tôi đã thấy tuyên bố ở đây https://developer.android.com/reference/android/app/Fragment.html

Lớp này không được dùng ở cấp API P. Sử dụng Phân đoạn Thư viện Hỗ trợ cho hành vi nhất quán trên tất cả các thiết bị và truy cập Vòng đời.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.