5

Chỉ cần tự hỏi thực hành nào tốt hơn để truyền thông tin giữa các hoạt động, thêm nó vào một gói hoặc sử dụng một lớp đơn để lưu trữ và truy cập dữ liệu này. Tôi đã sử dụng cả hai trong quá khứ cho các dự án bên android khác nhau, nhưng bây giờ tôi đang làm việc trên một dự án android có quy mô lớn hơn nhiều, vì vậy sẽ thích làm mọi thứ ngay từ đầu.Android truyền thông tin liên tục trong các gói hoặc sử dụng mẫu đơn?

Ứng dụng của tôi xác thực người dùng và sau đó sẽ phải thực hiện nhiều truy vấn khác nhau dựa trên id của nó. Để giảm thiểu sự liên kết giữa các hoạt động, tôi sẽ nghĩ rằng chỉ cần thêm id vào gói, và sau đó cho phép mỗi truy vấn hoạt động cho thông tin mà nó cần, sẽ là đặt cược tốt nhất; tuy nhiên để tăng khả năng đáp ứng, tôi đã hướng tới việc sử dụng một lớp đơn để lưu trữ thông tin liên tục, ngăn chặn nhiều truy vấn hơn là cần thiết.

Trả lời

7

Cá nhân, tôi sẽ tạo một tiện ích mở rộng Application để lưu trữ trạng thái ứng dụng của bạn và chia sẻ dữ liệu giữa các hoạt động khác nhau. Application hoạt động như bối cảnh cho toàn bộ ứng dụng của bạn và Android đảm bảo sẽ luôn chỉ có một phiên bản trên ứng dụng của bạn. Do đó nó hoạt động tương tự như việc xác định Singleton của riêng bạn, nhưng việc sử dụng Application sẽ cho phép Android kiểm soát vòng đời của dữ liệu được chia sẻ của bạn và về cơ bản là quản lý bộ nhớ cho bạn.

Here are some more details. Nếu bạn đi xuống đường dẫn này, bạn có thể chỉ cần thêm bất kỳ phương thức getter/setter (hoặc khác) nào vào phần mở rộng ứng dụng của bạn để lưu trữ/lấy dữ liệu và thực hiện các thao tác trên nó. Đặc biệt là sau này có thể trở thành một nỗi đau để quản lý (và giữ cho phù hợp) khi sử dụng Bundle s được truyền qua lại giữa các hoạt động. Nếu chỉ sử dụng Bundle nếu dữ liệu chỉ cần ở một hoặc hai địa điểm là hàng xóm trong luồng hoạt động không cần bất kỳ hoạt động (phức tạp) nào được chạy trên đó.

+0

Cảm ơn MH, chắc chắn có vẻ như tuyến đường đi. –

+0

Rất tiếc, tôi không đánh dấu phản hồi này là câu trả lời chính xác sớm hơn! –

+1

Bất kỳ đề xuất nào về khôi phục trạng thái của thông tin liên tục này khi ứng dụng Không có callbacks để lưu dữ liệu này, vì vậy điều duy nhất tôi có thể nghĩ đến là viết nó vào một SharedPreference –

0

Truyền gói là một công việc tẻ nhạt. Bạn sẽ phải chuyển một gói cho mọi thay đổi trong hoạt động để đảm bảo rằng giá trị không bị mất, ngay cả khi bạn không sử dụng giá trị trong hoạt động được gọi.

1

Thời gian duy nhất tôi chuyển dữ liệu giữa các hoạt động thông qua bunlde là nếu tôi không cần truy cập một thời gian (tức là resID của tài nguyên tôi muốn sử dụng một lần trong hoạt động gọi điện, v.v.) . Tôi cũng nghĩ rằng sự khác biệt về khả năng đáp ứng sẽ rất tối thiểu, do đó không đáng lo ngại. Tôi đề xuất cách tiếp cận singleton

1

Cách tốt hơn để đi cho bạn là sử dụng SharedPreferences để giữ userId bạn cần giữ và sử dụng lại. Tất nhiên bạn có thể sử dụng cách tiếp cận singleton hoặc thậm chí lớp Ứng dụng, nhưng dữ liệu sẽ bị mất sau khi ứng dụng bị giết.

0

Mẫu Singleton có một số kết quả không tốt. Ví dụ: Từ hoạt động chính bạn gọi là hoạt động phụ. Cuộc gọi điện thoại bị gián đoạn công việc của bạn.Sau khi kết thúc cuộc gọi điện thoại Android đang cố gắng mang hoạt động thứ cấp đến màn hình. Đây là cơn ác mộng của tôi - nhiều người dùng phàn nàn về ngoại lệ - Google báo cáo cho tôi con trỏ NULL trong singleton của tôi. Vì vậy, bạn phải cung cấp không chỉ singleton, nhưng tất cả các dữ liệu bên trong singleton phải được như singleton quá. Điều này gây trở ngại rất phức tạp: (

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