6

Tôi đã trải qua các bài đăng và câu hỏi khác nhau để xử lý xoay và AsyncTask. Trong mỗi bài đăng được đề cập rằng việc sử dụng android:configChanges là thực tiễn không tốt. Nhưng tôi đã không tìm ra lý do thực sự tại sao nó được khuyến khích và tại sao nó là một thực hành xấu. Đâu là bất lợi nếu chúng ta sử dụng android:configChanges để xử lý định hướng.lý do tại sao sử dụng android: configChanges là một thực tế không tốt

Lưu ý: Tôi biết nó đã được trả lời cách xử lý định hướng và AsyncTask. nhưng tôi muốn biết lý do đằng sau việc không sử dụng android:configChanges.

+0

xem: https://github.com/open-keychain/open-keychain/issues/257 –

+1

Một trong những lý do là do bạn sẽ tắt hành vi mặc định của Android và bạn thực sự phải chú ý giữ tất cả các chuỗi trong tay hơn. Vì vậy, tốt hơn để áp dụng mã của bạn vào các quy tắc của khuôn khổ, hơn là chống lại nó. Nhưng, có những tình huống mà nó là tốt và chỉ giải pháp, do đó, nó không phải là tất cả "1 hoặc 0. –

Trả lời

4

Vâng, bạn cần nhớ rằng có thể khởi động lại Activity vì nhiều lý do.

Ví dụ: một trong những lý do này là khi ứng dụng của bạn ở chế độ nền và hệ điều hành quyết định xóa nó (với số Activity, tất nhiên) để đòi lại bộ nhớ.

Khi bạn quay lại ứng dụng, HĐH sẽ cố gắng tạo lại Activity khi bạn rời khỏi nó, nhưng sẽ không làm như vậy, vì bạn quyết định không bận tâm, chỉ cần sử dụng android:configChanges trong Tệp kê khai của bạn.

Nếu bạn đảm bảo ứng dụng của mình có thể khôi phục đúng cách từ khi khởi động lại, thì có thể không cần thiết phải có android:configChanges. Vì lý do này, số cần để sử dụng android:configChanges có thể cho biết một số lỗ hổng trong ứng dụng của bạn, có thể đáng xem.

Thực tế không tồi khi sử dụng android:configChanges, nhưng nó khá dễ dàng có thể, nếu bạn không hiểu chính xác những gì bạn đang làm.

+2

Câu cuối cùng là chìa khóa !!! –

0

Để tổng hợp tất cả những gì tôi nhận được hình thức @ user13 câu trả lời và câu hỏi stackoverflow khác và bài viết blog tôi muốn chia sẻ phát hiện của tôi để xóa một số khía cạnh rất quan trọng.

  1. (user13) Đó không phải là xấu thực hành để sử dụng android: configChanges, nhưng nó khá dễ dàng có thể được, nếu bạn không hiểu chính xác những gì bạn đang làm

  2. Sử dụng kỹ thuật này ngăn không cho bạn dễ dàng sử dụng các tài nguyên cấu hình cụ thể. Ví dụ, nếu bạn muốn bố trí hoặc drawables hoặc dây hoặc bất cứ điều gì để được khác nhau trong chân dung và phong cảnh, bạn phải quản lý nó cho mình nếu bạn sử dụng android:configChanges.

  3. Bạn cần phải ghi đè và sử dụng phương pháp để thực hiện hành động cụ thể nếu bạn quyết định sử dụng android:configChanges
  4. Như user13 nêu Hoạt động được tái tạo không chỉ do sự thay đổi định hướng nhưng có nhiều lý do do đó hoạt động có thể được khởi động lại. Cần khởi động lại hoạt động cho tất cả các nguyên nhân. sử dụng android:configChanges chỉ xử lý một trường hợp và sẽ có các trường hợp khởi động lại không hoạt động sẽ gây ra lỗi tiềm ẩn.
  5. Có nhiều cách và cách tốt hơn để xử lý khởi động lại hoạt động và nhiều trợ giúp cũng có sẵn trên lưu lượng truy cập nên android:configChanges nên được sử dụng làm phương sách cuối cùng theo tài liệu.
0

Sử dụng android: configThay đổi là phương pháp hay nếu bạn biết mình đang làm gì.

Chỉ cần luôn kiểm tra cách ứng dụng của bạn hoạt động như thế nào khi hệ thống khởi động lại để luôn thoải mái cho người dùng để một số trạng thái phải được lưu mọi lúc nhưng không phải tất cả. Với những thay đổi cấu hình như thế này:

android:configChanges="locale|keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"

ứng dụng của bạn sẽ khởi động lại khá hiếm trên các thiết bị mới mà có rất nhiều bộ nhớ. Nếu nó khởi động lại nó không phải như vậy bất ngờ cho người dùng anyway, như người dùng đã có sự chú ý ở nơi khác và trở lại ứng dụng. Người dùng không phải ở trạng thái chính xác sau khi khởi động lại nếu nó xảy ra bằng cách giết thủ công ứng dụng hoặc khởi động lại ứng dụng vì một số nhiệm vụ nặng nề khác (chơi trò chơi) đang làm, trải nghiệm người dùng rất quan trọng ở đây.

Nếu bạn cần phải làm mới Danh sách chỉ dành riêng cho bố trí khác nhau cho định hướng thay đổi hoặc bạn cần để ẩn một số yếu tố xem bạn có thể gọi:

public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    _list.reloadData(); 
    _editorButton.visible(isPortrait()); 
} 

(tôi sử dụng các lớp tùy chỉnh của tôi nhưng bạn sẽ có được điểm)

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