2012-06-22 34 views
68

Tôi đang phát triển một ứng dụng Android sử dụng dịch vụ web để lấy dữ liệu từ máy chủ, vì tôi có ba bộ URL khác nhau để trỏ hệ thống phát triển, máy chủ thử nghiệm và máy chủ trực tiếp. Rất khó để thay đổi URL bất cứ khi nào tôi muốn cung cấp cho ứng dụng để thử nghiệm/phát trực tiếp. vì vậy tôi đã lên kế hoạch để làm cho nó có thể cấu hình được, do đó ứng dụng có thể nhận được URL thích hợp dựa trên cấu trúc của tôi về cấu hình kiểu hằng số. Vì vậy,Cách tốt nhất để xác định hằng số trong android, lớp tĩnh, giao diện hoặc tài nguyên xml là gì?

  • đó là cách tốt nhất để giữ hằng này, java lớp tĩnh hoặc java giao diện công cộng hay tập tin nguồn xml.? Khi nào? Tại sao?
  • mang lại hiệu suất tốt hơn ?, Khi nào? Tại sao?

Ex: nguồn xml

<integer name="config_build_type">0</integer> 
<string-array name="url_authentication"> 
    <item >http://development.com/xxxx</item> 
    <item >http://test.com/xxx</item> 
    <item >http://example.com/xxx</item> 
</string-array> 

Java tĩnh liên tục

public class Config { 
    public static final int BUILD_TYPE = 0; // 0 - development, 1 - test, 2 - live 
    public static final String[] URL_AUTHENTICATION = {"http://development.com/", "http://test.com/", "http://example.com"}; 
} 
+1

Tôi rất nghi ngờ hiệu suất sẽ là một vấn đề ở đây ... –

+0

Cho dù cuộc gọi dịch vụ web ở trong một lớp hay nhiều lớp? – Venky

+0

@venky, mà trong nhiều lớp, mỗi mục đích khác nhau tức là một cho người dùng xác thực khác để tải xuống dữ liệu và do đó .. – Jayabal

Trả lời

71

Có một sự khác biệt lớn giữa hai trong đó bạn có thể tham khảo tài nguyên dự án trong bố cục XML của bạn. Chúng có sẵn trong ngữ cảnh ứng dụng và do đó có thể truy cập được qua ứng dụng toàn cầu. Lợi thế lớn nhất của việc sử dụng tài nguyên dự án là sự dễ dàng truy cập và chúng cho phép bạn tổ chức dự án của mình một cách đáng kể.

static final hằng số được biên dịch vào bytecode java; tài nguyên dự án được biên dịch thành một định dạng nhị phân trong gói ứng dụng. Truy cập hoặc là cực kỳ hiệu quả ... nếu có sự khác biệt giữa hai, nó là tầm thường nhất.

Không có quy tắc thiết lập về cách bạn nên sử dụng tài nguyên/hằng số trong dự án của mình. Điều đó nói rằng, cá nhân tôi sử dụng tài nguyên cho các giá trị mà tôi có thể cần phải sử dụng trong mã Java XML hoặc của tôi. Mặt khác, tôi thường sử dụng hằng số static final cho các giá trị sẽ chỉ được mã java của tôi sử dụng và cụ thể cho việc triển khai của tôi.

Cũng lưu ý rằng có thể tải tài nguyên XML trong thời gian chạy tùy thuộc vào cấu hình hiện tại của thiết bị (ví dụ: kích thước màn hình, ngôn ngữ, v.v.). Vì vậy, bạn nên cân nhắc điều này khi quyết định có nên khai báo hằng số trong XML hay trực tiếp trong các tệp .java của mình hay không.

+0

cảm ơn u Alex. cho câu trả lời chi tiết. – Jayabal

+0

tài nguyên dễ cấu hình hơn trong các kiểu khác nhau/xây dựng các loại – HopefullyHelpful

+0

@Alex Tôi nghi ngờ bạn có thể làm rõ nó: Nên sử dụng biến tĩnh ít hơn nếu chúng ta tạo tệp liên tục với biến tĩnh sẽ không ảnh hưởng đến hiệu suất ứng dụng của chúng tôi? – Pallavi

8

Trong trường hợp tổng quát:

  • giá trị XML có lợi thế của accessbilty trong file layout và manifest tập tin trên hằng số trong tập tin java
  • giá trị XML có lợi thế để hỗ trợ đa ngôn ngữ trên Constants trong file java
+1

http://stackoverflow.com/questions/8380751/string-xml-or-constants-class –

+1

cảm ơn u Dheeresh, ya tôi hiểu, nó rất hữu ích để giữ cấu hình trong xml được truy cập bởi cả hai bố trí, biểu hiện và java – Jayabal

+0

luôn luôn chào đón ... :) –

0

Tôi không nghĩ rằng nó sẽ quan trọng hơn nhiều cho hiệu suất, phải trung thực. Nó chủ yếu đi xuống sở thích (tôi thích sử dụng một biến tĩnh trong mã).

Đây có lẽ là cách thực hiện tốt hơn để thực hiện điều đó, vì chúng không cần phải đọc từ XML, nhưng không có cách nào nó sẽ là một sự khác biệt đáng chú ý. Tôi lặp lại, bạn sẽ không nhận thấy sự khác biệt.

+0

cảm ơn u Geobits, cho ur phản ứng ngay lập tức. – Jayabal

1

Tôi nghĩ rằng cả hai cách có vẻ là tốt, nhưng điều là nó phụ thuộc vào yêu cầu của bạn.

Nếu bạn có giá trị (liên kết dịch vụ web) trong XML và giả sử có bất kỳ thay đổi nào về giá trị của bạn (liên kết dịch vụ web), bạn có thể dễ dàng thay đổi chỉ trong tệp XML.

Nhưng nếu bạn sử dụng các lớp bên trong làm biến tĩnh bạn phải thay đổi trong tất cả các tệp lớp.

Vì vậy, đề nghị của tôi là hằng số tách biệt với file nguồn và đưa vào tài nguyên và truy cập nó ..

0

Tôi vui mừng có người hỏi này ... cộng thêm một!

Tài nguyên dự án cần truy cập vào Ngữ cảnh, không có sẵn trong các phương pháp tĩnh (trừ khi bạn chuyển nó vào v.v.), nhưng luôn có sẵn trong Hoạt động - dường như có sự kết nối ưu tiên giữa tài nguyên và bố cục. Đối với biến ứng dụng và hằng số có thể được xử lý trong các phương thức tĩnh, tôi tạo một lớp trừu tượng và thực hiện nhập tĩnh (của lớp hằng số này) trong tất cả các tệp lớp dự án khác.

PVS

6

Đối với những người muốn xem làm thế nào chúng ta có thể sử dụng một lớp để xác định hằng số của chúng tôi và gọi bất kỳ nơi chúng ta cần.

Constant.java

package org.nrum.nrum; 

/** 
* Created by rajdhami on 5/23/2017. 
*/ 
public class Constant { 
    public static final String SERVER = "http://192.168.0.100/bs.dev/nrum"; 
// public static final String SERVER = "http://192.168.100.2/bs.dev/nrum"; 
    public static final String API_END = SERVER + "/dataProvider"; 
    public static final String NEWS_API = API_END + "/newsApi"; 
    public static final String BANNER_API = API_END + "/bannerApi/lists"; 
    public static final String NOTICE_API = API_END + "/noticeApi/lists"; 
    public static final String UPLOAD_PATH = SERVER + "/uploads"; 
    public static final String UPLOAD_PATH_BANNER = UPLOAD_PATH + "/company_1/banner"; 
    public static final String UPLOAD_PATH_NEWS = UPLOAD_PATH + "/company_1/news"; 
    public static final int BANNER_TRANSITION_DURATION = 5000; 
    public static final int NOTICE_BUTTON_BLINK_DURATION = 5000; 
    public static final int BANNER_FETCH_LIMIT = 3; 
} 

Bây giờ chúng ta có thể sử dụng trên các hằng số trong sau cách.

Constant.NOTICE_BUTTON_BLINK_DURATION 
+0

Có hiệu quả hoạt động tốt không? – Umar

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