2009-12-21 38 views
12

Tôi có ứng dụng được điều khiển bởi cấu hình XML: các thuộc tính ứng dụng khác nhau được tải tại thời điểm bắt đầu ứng dụng bằng cách phân tích cú pháp XML và khởi tạo biến tĩnh của một số lớp. Dữ liệu được đọc từ XML này điều khiển các Hoạt động khác nhau của ứng dụng. Hiện tại, tôi có được gọi là "phân tích cú pháp và khởi tạo thuộc tính" từ onCreate() của Hoạt động chính của tôi.Khởi tạo ứng dụng Android

Tôi có một số câu hỏi liên quan đến trường hợp này/cách tiếp cận:

  1. Tôi có nên gọi phương thức khởi tạo ứng dụng từ ứng dụng Object hoặc là cách tiếp cận hiện nay có đúng không? Lợi thế/ những nhược điểm nào/chúng ta sẽ nhận/có nếu tôi chọn gọi nó từ đối tượng ứng dụng ?

  2. Chúng tôi có thực sự cần một lớp tĩnh để lưu trữ thuộc tính ứng dụng không? Hoặc chúng ta có thể có tất cả các thuộc tính như là một biến Collection tĩnh trong đối tượng ứng dụng?

  3. Phân tích cú pháp XML (~ 200 nút) tại thời gian tải ứng dụng có thể mất một thời gian (không phải đảm bảo thời gian dài); Làm thế nào tôi có thể tránh các ANR đáng sợ? Tôi đang sử dụng Trình phân tích cú pháp kéo .

Vui lòng giúp tôi tìm câu trả lời cho những câu hỏi này.

Cảm ơn bạn.

Trả lời

4

Đối tượng Application được sử dụng để chia sẻ phi dai dẳng nhà nước trên ứng dụng. Tôi không nghĩ bạn sẽ cần sử dụng lớp học Application. Bạn có thể thực hiện khởi tạo của mình theo phương thức onCreate() của số Activity được gọi trước.Để quote the documentation:

Lớp con là tùy chọn; hầu hết các ứng dụng sẽ không cần. Trong trường hợp không có một lớp con, Android sử dụng một cá thể của lớp Ứng dụng cơ sở.

Bạn không cần tạo lớp của riêng mình để lưu trữ thuộc tính ứng dụng. Điều này được thực hiện cho bạn bởi SharedPreferences.

Bạn cũng nên xem xét lớp setDefaultValues() method in the PreferenceManager vì điều này sẽ đặt tùy chọn từ dữ liệu trong tệp XML. Điều tốt đẹp về phương pháp này là sử dụng tham số readAgain để XML chỉ được phân tích cú pháp một lần - lần đầu tiên bạn khởi động ứng dụng của mình - thay vì mỗi lần.

10
  1. Tùy thuộc vào những gì bạn đang khởi tạo. Ứng dụng của onCreate() nên được sử dụng khi bạn làm những việc cần phải thực hiện trước khi bất kỳ phần nào của ứng dụng hoạt động chính xác và chỉ cần thực hiện một lần, trong khi Hoạt động/Dịch vụ/etc/onCreate() phải được sử dụng cho những thứ cần thiết cho thành phần đó một mình và cần phải được thực hiện nhiều lần.

    Mối quan tâm chính mà tôi có để đưa tất cả khởi tạo của bạn vào một thành phần là nó sẽ làm cho việc mở rộng ứng dụng của bạn trở nên khó khăn hơn sau này. Giả sử bạn muốn thực hiện một số Hoạt động trong ứng dụng của bạn có thể truy cập bằng các ý định bên ngoài - bây giờ bạn phải di chuyển mã khởi tạo sang Ứng dụng hoặc bạn phải lặp lại mã khởi tạo trong Hoạt động không khởi chạy.

  2. Có vẻ như bạn nên xem SharedPreferences, đặc biệt là PreferenceManager.getDefaultSharedPreferences(). Các tùy chọn sẽ được lưu trữ giữa các phiên và nó cho phép bạn dễ dàng truy cập vào các thuộc tính đơn giản từ bất kỳ bối cảnh nào.

  3. Luồng. Tôi thấy AsyncTask là cách dễ nhất để hoàn thành nhiệm vụ này; có a good write-up on it at Google. Ngoài ra, bạn có thể kích hoạt một Dịch vụ để thực hiện thao tác này trong nền khi có Hoạt động nền trước thông báo cho người dùng biết rằng bạn đang khởi động ứng dụng.

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