2013-03-01 38 views
13

Tôi có phương pháp trợ giúp thiết lập mức độ hiển thị của một số View s nhất định tùy thuộc vào các biến trạng thái được chuyển vào các phương thức. Đôi khi, các phương pháp này sẽ được gọi nhiều lần và khả năng hiển thị của View sẽ không thay đổi. Vì vậy, tôi thấy mình bắt đầu kiểm tra mức độ hiển thị của mỗi View trước khi đặt nó với suy nghĩ, "Không có điểm trong việc thay đổi chế độ hiển thị của Chế độ xem thành cùng mức hiển thị và làm mới không có lý do".Chế độ xem Android: có thể kiểm tra khả năng hiển thị trước khi thiết lập khả năng hiển thị cải thiện hiệu suất?

  if (myView.getVisibility() != View.VISIBLE) { 
       myView.setVisibility(View.VISIBLE); 
      } 
      etc... 

Tuy nhiên, bây giờ tôi đang tự hỏi nếu thi hành setVisibility đã mất này vào tài khoản, và kiểm tra nếu bạn đang thiết khả năng hiển thị cùng với những gì View đã có, và không cách không cần thiết làm mới View (mã của tôi đang cố gắng làm gì).

Vì vậy, không ai biết liệu "tối ưu hóa" của tôi có thực sự cải thiện hiệu suất hay API đã đi trước tôi một bước không?

+0

có, bạn đang cải thiện hiệu suất, bởi vì bạn không yêu cầu máy ảo tải 'setVisibility' mỗi lần. –

+0

@Geobits thực sự như bạn đã nói, việc đặt chế độ hiển thị sẽ không làm mới chế độ xem nếu mức hiển thị giống nhau, nhưng nếu anh ta yêu cầu hiệu suất mã trong trường hợp của mình, điều này sẽ cải thiện. –

+0

nhưng 'setVisibilty' sẽ gọi một phương thức khác: 1-' setFlags', 2- 'mBackground.setVisible' –

Trả lời

36

Họ đã đi trước một bước. Xem mã cho View.java:setVisibility():

public void setVisibility(int visibility) { 
    setFlags(visibility, VISIBILITY_MASK); 
    ... 
} 

Nó kêu gọi setFlags():

void setFlags(int flags, int mask) { 
    int old = mViewFlags; 
    mViewFlags = (mViewFlags & ~mask) | (flags & mask); 

    int changed = mViewFlags^old; 
    if (changed == 0) { 
     return; 
    } 
    .... 
} 

Nó sẽ kiểm tra xem cờ phù hợp với tình trạng hiện tại. Nếu vậy, nó chỉ đơn giản là trả về mà không làm bất cứ điều gì.

+0

Bingo, chính xác những gì tôi muốn biết. Tôi sẽ loại bỏ kiểm tra đôi của tôi và tiết kiệm cho mình một số dễ đọc. Cảm ơn ngài! –

+0

bạn đã giành được phiếu bầu của tôi –

+0

Tôi sắp tạo cờ tương tự .. may mắn khi thấy câu trả lời của bạn. –

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