2012-02-26 39 views
53

Window trong Android là gì?Cửa sổ Android là gì?

Tôi nghĩ mức cao nhất trong Android được gọi là Activity, là màn hình bạn thấy.

Ai đó có thể cho tôi biết Cửa sổ trong Android là gì? chúng ta chỉ có một hoặc nhiều người trong số họ.

Trả lời

8

Hoạt động là thứ bạn sẽ gọi là Cửa sổ.

Về mặt kỹ thuật, Hoạt động tạo Cửa sổ cho bạn.

Bạn có thể có nhiều người trong số họ, nhưng thường không đồng bộ. Để yêu cầu thêm thông tin, bạn có thể gọi một Dialog, hoặc bắn Intent đến một Activity khác.

Để biết thêm thông tin visit this link.

+0

Có activity.getWindow(), do đó cửa sổ là một phần của hoạt động. – Zon

134

[UPDATE] (Hãy để tôi chia sẻ những gì tôi đã học được về Window sau câu trả lời ban đầu)

Trong một câu, MộtWindowlà một khu vực hình chữ nhật trong đó có một cái nhìn hệ thống phân cấp. Hình chữ nhật màu bên dưới hình ảnh là cửa sổ.

enter image description here

Như bạn có thể thấy, có thể có nhiều cửa sổ trong một màn hình, và WindowManager quản lý chúng. Có thể lấy danh sách cửa sổ trong màn hình hiện tại qua Hierarchy Viewer hoặc adb shell dumpsys window.

danh sách cửa sổ trong Hierarchy Viewer dụ: enter image description here

(Dưới đây là câu trả lời ban đầu)


Tôi có cùng một câu hỏi, và tôi hy vọng điều này có thể giúp bạn guys.

Theo Android Developer Documentation,

"Mỗi hoạt động được đưa ra một cửa sổ, trong đó để vẽ giao diện người dùng của nó."

Dianne Hackborn, người là một kỹ sư khuôn khổ Android, đã đưa ra một số định nghĩa here. Bà cho biết,

Một cửa sổ là cơ bản giống như bạn nghĩ về một cửa sổ trên desktop. Nó có một Bề mặt duy nhất trong đó nội dung của cửa sổ được hiển thị.Ứng dụng tương tác với Trình quản lý cửa sổ để tạo cửa sổ; Trình quản lý cửa sổ tạo một bề mặt cho mỗi cửa sổ và đưa nó vào ứng dụng để vẽ. Ứng dụng có thể vẽ bất cứ thứ gì nó muốn trên Surface; với Trình quản lý cửa sổ, nó chỉ là một hình chữ nhật mờ.

Một Surface là một đối tượng giữ pixel đang được ghép vào màn hình. Mỗi cửa sổ bạn nhìn thấy trên màn hình (một hộp thoại, hoạt động toàn màn hình, thanh trạng thái) có bề mặt riêng của nó mà nó vẽ vào, và Surface Flinger hiển thị chúng cho màn hình cuối cùng theo thứ tự Z chính xác của chúng. Một bề mặt thường có nhiều hơn một bộ đệm (thường là hai) để làm hiển thị bộ đệm đôi: ứng dụng có thể vẽ trạng thái giao diện người dùng tiếp theo của nó trong khi bộ rung bề mặt kết hợp màn hình bằng bộ đệm cuối cùng mà không cần phải đợi ứng dụng kết thúc bản vẽ.

Chế độ xem là phần tử giao diện người dùng tương tác bên trong cửa sổ. Một cửa sổ có một hệ thống phân cấp chế độ xem duy nhất gắn liền với nó, cung cấp tất cả hành vi của cửa sổ. Bất cứ khi nào cửa sổ cần được vẽ lại (chẳng hạn như vì chế độ xem đã vô hiệu), điều này được thực hiện vào Surface của cửa sổ. Bề mặt bị khóa, trả về Canvas có thể được sử dụng để vẽ vào. Một quá trình truyền tải được thực hiện xuống cấu trúc phân cấp, đưa Canvas xuống cho mỗi chế độ xem để vẽ phần của giao diện người dùng. Sau khi thực hiện, Surface được mở khóa và được đăng để bộ đệm vừa vẽ được đổi thành nền trước sau đó được kết hợp với màn hình bằng Surface Flinger.

Ngoài ra, tôi tìm thấy một số thông tin khác từ trình bày Romain Guy 's (Bạn có thể xem buổi nói chuyện tại nhóm người dùng San Francisco Android từ here, và tải về các slide đầy đủ từ here)

enter image description here

Vì vậy, trong một nutshell:

  • Một Activity có một cửa sổ (trong đó nó thu hút giao diện người dùng của nó),
  • một Window có một đơn Surface và phân cấp hình ảnh đơn gắn liền với nó,
  • một Surface bao gồm ViewGroup mà giữ quan điểm.
+0

Cảm ơn câu trả lời và liên kết xuất sắc. Có thể ai đó xin vui lòng cho tôi biết nơi decorView phù hợp trong, trong lời giải thích này? – abhiank

+0

Bạn có thể cho tôi biết tại sao view.getLocationInWindow() trả về toạ độ y sao cho nó có chiều cao thanh trạng thái quá. Thanh trạng thái được cho là nằm trong một cửa sổ khác. Ngoài ra, tôi đã kiểm tra xem cửa sổ tôi đang nói đến có phải là cửa sổ hoạt động hay không. –

9

Android: Window, Surface, Canvas, and Bitmap Dưới đây là tổng quan khái niệm cơ bản và đơn giản về cách tương tác xảy ra giữa Window, Surface, Canvas và Bitmap.

+0

Tương ứng với các bề mặt trên và dưới trong sơ đồ với trạng thái và thanh điều hướng? –

+0

Mọi cửa sổ trên màn hình đều có bề mặt. Có thể có nhiều cửa sổ trên màn hình. Có, thanh điều hướng và thanh trạng thái có các cửa sổ liên quan và các bề mặt được đính kèm của chúng. Hình trên chỉ là một minh họa mẫu của khái niệm. – Sabeeh

1

Tôi muốn nói một cách ngắn gọn:

Application ---> 
    Activity ---> 
    Window Manager ---> 
     Window ---> 
     Surface ---> 
      Canvas ---> 
      View Root ---> 
       View Group ---> 
       View ---> 
        Bitmap/Open GL panel ---> 
        Current Surface Buffer ---> 
         Surface Flinger ---> 
         Screen 
+0

Cảm ơn Finwe thân yêu vì định dạng tốt hơn này. Thật tình, tôi hoàn toàn mới với stackoverflow. –

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