2014-07-08 21 views
12

Tôi đang làm việc trong một dự án yêu cầu tăng lượng hướng dẫn đơn giản Xem khi người dùng mở ứng dụng lần đầu tiên. Tôi đang cố gắng để làm điều đó "đúng cách", và tôi đang tự hỏi về vấn đề hiệu suất.Hiệu suất Android: Thêm chế độ xem theo chương trình và chế độ xem thiết lập để GONE/VISIBLE

Hiện tại, tôi có trong bố cục của mình chế độ xem được đặt thành android:visibility="GONE", mà tôi thay đổi thành VISIBLE tùy thuộc vào SharedPreference. Điều này cho phép tôi cho phép người dùng tìm hiểu cách ứng dụng hoạt động trên lần khởi chạy đầu tiên.

Điều tôi đang tự hỏi là những gì nó ngụ ý khi chế độ xem được hiển thị trong Phân đoạn của tôi. Đoán của tôi là chế độ xem sẽ được tăng cao một cách vô ích, ngay cả khi mức độ hiển thị của nó được đặt thành GONE.

Bây giờ, tôi đang suy nghĩ về một giải pháp thay thế: nếu tôi chỉ thêm Chế độ xem vào lần ra mắt đầu tiên, nhưng theo chương trình, trong số onCreateView của Fragment của tôi. Điều đó sẽ cho phép lượt xem không được tăng cao khi khởi chạy sau đó, nhưng sẽ không làm tăng lượt xem theo chương trình ngụ ý hiệu suất kém khi ra mắt lần đầu tiên?

+0

Không chắc chắn về so sánh hiệu suất. Nhưng nếu nó thực sự giống như hướng dẫn trên chạy đầu tiên, sau đó cung cấp cho [Showcase View] (https://github.com/amlcurran/ShowcaseView) một thử :) –

+0

@PurpleDroid Vâng, tôi thực sự hiển thị nó như là một 'CardView' ngay bây giờ. Nó chỉ là một FYI cho người dùng lần đầu tiên, không thực sự là một hướng dẫn! :-) – MagicMicky

+0

@MagicMicky: Xin lỗi nhưng tôi phải hỏi "Bạn đã thử gì?". Nó rất dễ dàng để sử dụng một cái gì đó như DDMS để theo dõi sự tiến bộ của một ứng dụng bằng cách sử dụng logcat. Tại sao bạn không thử các phương pháp tiếp cận khác nhau và xem điều gì sẽ xảy ra? – Squonk

Trả lời

7

Vì vậy, để trả lời câu hỏi của riêng tôi, tôi đã sử dụng công cụ DDMS TraceView để theo dõi các cuộc gọi từ đoạn của tôi onAttach cho đến khi số onResume. Nó cho tôi thấy việc triển khai nào kém hiệu quả hơn.

Để làm bài kiểm tra, tôi đã có một đơn giản RelativeLayout với một FrameLayout bên trong nó (hiển thị mọi lúc). Tôi đã sử dụng bố cục tùy chỉnh để thêm mỗi lần, theo lập trình hoặc với khả năng hiển thị GONE trên tệp bố cục của tôi. Bố trí tùy chỉnh bao gồm RelativeLayout với 4 childs (một ImageView, một TextView, một View và một Button).

My onCreateView là như sau, cho phép ứng dụng thổi phồng bố cục phù hợp dựa trên hai hằng số static final boolean để thay đổi bố cục.

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    LinearLayout root; 
    if(INFLATE_PROGRAMMATICALY) { 
     root = (LinearLayout) inflater.inflate(R.layout.fragment_test_prgmcly, container, false); 
     if(SHOULD_FYI_VIEW_BE_SHOWN) { 
      View tutoView = inflater.inflate(R.layout.inner_view, root, false); 
      root.addView(tutoView); 
     } 
    } else { 
     root = (LinearLayout) inflater.inflate(R.layout.fragment_test_gone,container,false); 
     if(SHOULD_FYI_VIEW_BE_SHOWN) { 
      View tutoView = root.findViewById(R.id.RL_inner_view); 
      tutoView.setVisibility(View.VISIBLE); 
     } 
    } 
    return root; 
} 

Điều này dẫn đến kết quả như sau:

Khi bố trí tùy chọn trong thổi phồng

SHOULD_FYI_VIEW_BE_SHOWN=true

tối đa "thực ước tính thời gian" được đưa ra bởi TraceView là của 75ms khi chỉ có một chế độ xem để thay đổi từ GONE thành VISIBLE, nhưng của 110ms khi chúng tôi cần khởi tạo inner_view.

Khi bố trí tùy chọn không được thổi phồng SHOULD_FYI_VIEW_BE_SHOWN=false

Trong trường hợp này, ước tính thời gian thực tối đa do TraceView là của 102ms cho lạm phát của quan điểm GONE, so với 39ms khi chế độ xem tăng cao không có chế độ xem GONE. Vì vậy, để đạt được hiệu suất khi lượt xem không cần phải tăng cao, tôi muốn nói rằng giải pháp tốt nhất là để tăng lượt xem của bạn theo chương trình nếu bạn chỉ cần hiển thị một thời gian.

Bạn có thể tìm thấy những dự án thử nghiệm trên một Gist

1

Tôi nghĩ rằng tôi chỉ ngẫu nhiên vấp phải câu trả lời của câu hỏi về hiệu suất của bạn.

Từ Animation Docs:

Để có cái nhìn đang được mờ trong, thiết lập mức độ hiển thị biến mất. Điều này ngăn chế độ xem lấy không gian bố cục và bỏ qua nó khỏi bố cục tính toán, tăng tốc quá trình xử lý.

Điều này có nghĩa hiệu suất không được thỏa hiệp, miễn là bạn không đặt android:visibility để bất cứ điều gì khác hơn GONE.

4

Tôi nghĩ rằng bạn đang thiết kế lại một bánh xe. Đối với kịch bản này là đã có công cụ trong bố trí xml Android. Nó được gọi là ViewStub. Bạn có thể đọc thêm tại đây: Loading ondemand

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