2013-04-27 28 views
13

Tôi đang học cách sử dụng các mảnh, và có rất nhiều gotchas nhỏ mà tôi đã đi qua cho đến nay. Phương pháp executePendingTransactions của FragmentManager vẻ như nó có thể có một vài trong số riêng của mình, đặc biệt là vì ghi chú này trong mô tả của nó trong tài liệu Android chính thức:Những trường hợp nào tôi KHÔNG nên sử dụng executePendingTransactions của FragmentManager() (trong chuỗi chính)?

Nếu bạn muốn ngay lập tức thực hiện bất kỳ hoạt động cấp phát như vậy, bạn có thể gọi chức năng này (chỉ từ chủ đề chính) để làm như vậy. Lưu ý rằng tất cả các cuộc gọi lại và hành vi liên quan khác sẽ được thực hiện từ bên trong cuộc gọi này, vì vậy hãy cẩn thận về nơi mà cuộc gọi này được gọi. http://developer.android.com/reference/android/app/FragmentManager.html#executePendingTransactions()

Nghe như một cảnh báo khá khó hiểu. Các "callbacks và hành vi liên quan khác" sẽ ảnh hưởng như thế nào đến ứng dụng của tôi? Điều này có thể gây ra sự cố khi gọi chức năng này từ chuỗi chính không? Tôi không thể tìm thấy bất kỳ ví dụ cụ thể, vì vậy tôi yêu cầu sự giúp đỡ từ bất cứ ai đã demystified cảnh báo này: một số ví dụ về khi nào tôi nên không sử dụng executePendingTransactions trong thread chính, và những điều khủng khiếp sẽ xảy ra nếu tôi đã làm là gì ? Hoặc là luôn luôn an toàn để sử dụng miễn là nó nằm trong chủ đề chính?

+0

http://stackoverflow.com/questions/6276991/android-honeycomb-how-to-determine-when-fragmenttrancaction-commit-has -finish – waqaslam

+0

Cảm ơn @Waqas, tôi đã đọc chủ đề đó trước khi đăng bài này. Nó vẫn không trả lời câu hỏi của tôi, vì nó chỉ tập trung vào một trường hợp cụ thể. – LearningNerd

Trả lời

11

Bạn KHÔNG nên gọi phương thức này khi bạn đang ở trong một chủ đề không phải là chuỗi giao diện người dùng.

Nó được quy định trong same lines:

Nếu bạn muốn ngay lập tức thực hiện bất kỳ hoạt động cấp phát như vậy, bạn có thể gọi chức năng này (chỉ từ thread chính) để làm như vậy.

+4

Phải, tôi đọc phần đó quá, nhưng khi nó nói "hãy cẩn thận về nơi này được gọi là từ" nó có vẻ như nó đề cập đến sử dụng nó trong thread UI là tốt. Vì vậy, câu hỏi của tôi là: khi nào tôi không nên sử dụng 'executePendingTransacations' trong chuỗi giao diện người dùng? Hoặc là nó an toàn để sử dụng nó trong bất kỳ hoàn cảnh miễn là nó trong thread UI? – LearningNerd

+4

Có, bạn có thể sử dụng nó trong bất kỳ hoàn cảnh nào miễn là nó nằm trong chuỗi giao diện người dùng. –

6

bạn không thể gọi nó từ bên trong một giao dịch đã thực hiện. bạn sẽ nhận được "Mục nhập đệ quy để executePendingTransactions"

cho ví dụ: bạn thay thế một đoạn và sau đó gọi executePendingTranstactions. và trong phần Tạo ra đoạn đó, bạn thay thế một đoạn khác (với mảnh phân đoạn của hoạt động)

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