2010-07-16 3 views
20

Tôi vừa bị đốt cháy bởi một tiện ích. Tôi có thể thấy nguyên nhân của vấn đề, nhưng tôi không thể xác định tại sao hoặc giải pháp của nó. Tiện ích của tôi đã phát hành một tìm kiếm (SearchManager) và hoạt động khởi chạy hộp thoại tìm kiếm, nhưng khi nó được gọi trở lại tiện ích của tôi, nó đã tạo một tham chiếu khác cho tiện ích (ví dụ: id-thread giống nhau, nhưng id tiện ích con thay đổi từ 65 thành 0).Khi nào cần sử dụng singleTop launchMode trong một widget hoặc ứng dụng Android?

Điều này khiến tôi tin rằng một phiên bản mới đã được tạo và tôi đã tìm kiếm tài liệu về các cài đặt có thể áp dụng cho sự cố. Cuối cùng, tôi tình cờ gặp android:launchMode="singleTop" và ngay sau khi tôi đặt nó trong AndroidManifest, viola! Tiện ích của tôi hoạt động.

Điều này đã cho tôi phần tốt hơn trong hai ngày để gỡ lỗi.

Có bất kỳ tình huống nào khác hoặc có câu trả lời đúng về mặt kỹ thuật cho vấn đề của tôi không?

+1

Tôi không nghĩ tiêu đề câu hỏi hữu ích cho nội dung. Tôi hy vọng sẽ thấy một câu hỏi và câu trả lời về các trường hợp sử dụng thích hợp cho singleTop. Đây là một chút câu chuyện phát triển và sau đó là một trích dẫn từ tài liệu. – helloPiers

+1

@ Lot105 - đủ công bằng. Tiếp tục và thêm một số câu trả lời. Đó là một vấn đề lớn mà tôi gặp phải vì vậy tôi đã làm "hỏi và trả lời câu hỏi của riêng bạn" như được đề xuất bởi SO. Tôi chắc chắn rằng (các) đóng góp câu trả lời của bạn và những người khác sẽ cải thiện phần Hỏi & Đáp này. Nó đã có hơn 3000 lượt xem, vì vậy rõ ràng là có sự quan tâm. Tôi nghi ngờ rằng câu trả lời của tôi là * ONLY * trả lời :) Và tất nhiên, nó là một tài liệu tham khảo và trích dẫn từ doc vì đó là nơi tôi nhận được câu trả lời của tôi. Cá nhân, tôi tìm thấy giá trị thực sự trong vấn đề/câu trả lời kiểu này vì nó làm rõ DOC. – mobibob

+1

Tôi nên rõ ràng hơn. Câu hỏi và câu trả lời là hữu ích và thú vị theo cách riêng của họ, tuyệt đối. – helloPiers

Trả lời

36

Tôi đã đọc nhiều hơn trong Tài liệu Android - Tôi có thể dành toàn bộ thời gian đọc tài liệu của họ và tìm chi tiết tinh tế mới phá vỡ bộ não của tôi :) Điều này giải thích nhiều trường hợp của tôi mà tôi không mong đợi, tuy nhiên, tôi đã định cấu hình xảy ra.

Android Doc on Activity definition for AndroidManifest.xml

Các "tiêu chuẩn" và "singleTop" chế độ khác nhau chỉ trong một tôn trọng: Mỗi khi có mới ý định cho một hoạt động "chuẩn", một trường hợp mới của lớp học được tạo ra để trả lời ý định đó. Mỗi trường hợp xử lý một mục đích duy nhất. Tương tự, phiên bản mới của hoạt động "singleTop" cũng có thể được tạo để xử lý mục đích mới. Tuy nhiên, nếu tác vụ đích đã có một phiên bản hiện tại của hoạt động ở đầu ngăn xếp của nó, trường hợp đó sẽ nhận được ý định mới (trong một cuộc gọi onNewIntent()); a phiên bản mới không được tạo. Trong các trường hợp khác - ví dụ: nếu phiên bản hiện tại của hoạt động "singleTop" có trong nhiệm vụ mục tiêu, nhưng không ở trên cùng của ngăn xếp hoặc nếu nó ở đầu ngăn xếp, nhưng không ở nhiệm vụ mục tiêu - một phiên bản mới sẽ được tạo và được đẩy lên ngăn xếp.

+6

"hoặc nếu nó ở trên cùng của một ngăn xếp, nhưng không phải trong nhiệm vụ mục tiêu - một phiên bản mới sẽ được tạo và được đẩy lên ngăn xếp." Tại sao? Ai đó có thể giải thích thêm phần được trích dẫn này không? – Patrick

+0

@Patrick Tôi tin rằng kịch bản này là khi bạn sử dụng FLAG_ACTIVITY_NEW_TASK. Trong trường hợp này, bạn không quan tâm đến nhiệm vụ hiện tại, và bạn đang tạo một nhiệm vụ mới, do đó hoạt động của bạn trở thành công việc duy nhất trong nhiệm vụ mới.Đúng nếu tôi sai. –