Android: Sự khác biệt giữa setFlags và addFlags cho ý định


Câu trả lời:


133

Khi bạn sử dụng, setFlagsbạn đang thay thế các cờ cũ ... khi bạn sử dụng, addFlagsbạn đang thêm các cờ mới. Hãy nhớ rằng, cờ chỉ là một số nguyên là lũy thừa của hai ... trong hệ nhị phân, cờ trông như thế này: 1, 10, 100, 1000, v.v. (trong trường hợp này là 1, 2, 4, 8) . Vì vậy, những gì addFlagsđang làm là thêm số nguyên bạn chuyển bằng cách sử dụng |toán tử.

// example... 
// value of flags: 1
intent.setFlags(2|4); 
// now flags have this value: 110
intent.addFlags(8); 
// now flags have this value: 1110

Làm thế nào có thể nó có thể intent.setFlags(2|4);sẽ cung cấp 110 giá trị
Gopal Singh Sirvi

6
@GopalSinghSirvi ở dạng nhị phân LSB (bit ít quan trọng nhất) cho các giá trị con người có thể đọc được là giá trị phù hợp nhất. điều đó có nghĩa là số 0 trong số 110 đại diện cho giá trị 2 ^ 0 = 1. Giá trị thứ hai 1 đại diện cho 2 ^ 1 = 2. Và giá trị thứ ba đại diện cho 2 ^ 2 = 4. Vì vậy, sử dụng OR | toán tử trên 4 (100) và 2 (010) là 110
Patric

Không nên nhầm lẫn điều này với Window.setFlags / addFlags có hành vi khác với các phương thức Intent.
TheIT

Tôi có thể biết công dụng của những cờ dự định này không? hoặc bạn có thể gắn thẻ tôi vào câu hỏi thích hợp không?
Anish Kumar

11
intent.setFlags(int num);

Cờ tập hợp này kiểm soát cách xử lý Intent.setflag chủ yếu phụ thuộc vào loại thành phần được thực thi bởi Intent.

intent.addFlags(int num);

Điều này giúp thêm các cờ bổ sung cho một ý định cụ thể với các giá trị hiện có. Điều này cũng trả về cùng một đối tượng ý định để xâu chuỗi nhiều cuộc gọi vào một câu lệnh duy nhất.


6
 public Intent addFlags(int flags) {
    mFlags |= flags;
    return this;
}
public Intent setFlags(int flags) {
    mFlags = flags;
    return this;
}

Chỉ cần tìm thấy điều này từ mã nguồn, để tham khảo.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.