Sự khác nhau giữa Activity.runOnUiThread
và View.post
, ai đó có thể, vui lòng giải thích?Android: Sự khác nhau giữa Activity.runOnUiThread và View.post là gì?
Trả lời
Không có sự khác biệt thực sự, ngoại trừ việc View.post
hữu ích khi bạn không có quyền truy cập trực tiếp vào hoạt động.
Trong cả hai trường hợp, nếu không có trên chuỗi giao diện người dùng, Handler#post(Runnable)
sẽ được gọi phía sau hậu trường.
Như CommonsWare đề cập trong các bình luận, có sự khác biệt giữa hai - khi kêu gọi Ui chủ đề, Activity#runOnUiThread
sẽ gọi phương thức run
trực tiếp, trong khi View#post
sẽ đăng runnable
trên hàng đợi (ví dụ gọi Handler#post
)
Điểm quan trọng IMO là cả hai đều có cùng mục tiêu và cho bất kỳ ai sử dụng nó, sẽ không có sự khác biệt (và việc triển khai có thể thay đổi trong tương lai).
Một sự khác biệt: 'runOnUiThread()' kiểm tra luồng hiện tại và thực thi 'Runnable' ngay lập tức nếu chúng ta xảy ra trên luồng ứng dụng chính. 'post()' luôn đặt 'Runnable' trên hàng đợi, cho dù nó được gọi là gì. – CommonsWare
@CommonsWare - True, tôi sẽ chỉnh sửa câu hỏi của mình. – MByD
Cảm ơn bạn giờ đây tôi có thể thấy sự khác biệt dựa trên lời giải thích của bạn và nhận xét @CommonsWare. –
Hoặc là chấp nhận được đối với hầu hết các trường hợp và phần lớn chúng có thể hoán đổi cho nhau, nhưng chúng là khác nhau một cách tinh tế. Sự khác biệt lớn nhất của khóa học là một trong những có sẵn từ một Activity
và khác từ một View
. Có rất nhiều sự trùng lặp giữa những điều đó, nhưng đôi khi trong một số Activity
bạn sẽ không có quyền truy cập vào số View
và đôi khi trong một số View
bạn sẽ không có quyền truy cập vào số Activity
.
Một trong những trường hợp cạnh tôi đã gặp phải với View.post
tôi đã đề cập trong an answer to another SO question on View.post
: View.post
chỉ hoạt động từ một thread khi View
được gắn vào một cửa sổ. Đây hiếm khi là một vấn đề, nhưng đôi khi có thể khiến cho Runnable
không bao giờ thực thi, đặc biệt nếu bạn gọi View.post
theo phương thức onCreate
của Activity
. Một cách khác là sử dụng Handler.post
đó là những gì Activity.runOnUiThread
và View.post
sử dụng dưới dạng bìa.
(sửa cho chính xác, thêm vào "từ một thread")
Nó có thể thất bại khi unattached trong 'onCreate()' cũng? Hm, tôi hy vọng nó sẽ được đăng lên 'Handler' được cung cấp bởi' ViewRoot' trong trường hợp đó. – Jens
@ Jens Yeah, tôi đã liếc nhìn nguồn và 'View.post' nên thêm' Runnable' vào hàng đợi để được thực hiện sau nếu nó chưa được đính kèm. Tôi chưa đào sâu hơn nguồn, nhưng [docs] (http://developer.android.com/reference/android/view/View.html#post%28java.lang.Runnable%29) nói: "Phương thức này có thể được gọi từ bên ngoài của chuỗi giao diện người dùng chỉ khi Chế độ xem này được gắn vào một cửa sổ." Vì vậy, tôi nghĩ rằng nếu đó là trên các chủ đề hiện tại, sau đó những gì bạn nói là đúng, nếu nó không phải là sau đó nó có thể chỉ nuốt 'Runnable'. Tôi chắc chắn đã có điều đó xảy ra trong mã của tôi. – kabuko
@kabuko Cảm ơn câu trả lời của bạn cho thấy nó từ một điểm khác. Làm thế nào nó là tôi không thể chấp nhận nhiều hơn 1 câu trả lời không thể nhìn thấy logic đằng sau đó sẽ adress meta diễn đàn –
Một điểm khác biệt giữa Activity.runOnUiThread và view.post() là Runnable trong view.post() được gọi sau khi xem là gắn liền với một cửa sổ.
Bạn có ý nghĩa như thế nào? Trở nên rõ ràng? Không được gọi trên một cái nhìn vô hình ở tất cả? –
Sửa lỗi mơ hồ Alex. – pareshgoel
Đây là sự khác biệt quan trọng nhất IMHO. Rất nhiều người sử dụng view.post() để thực thi các công cụ cần được thực hiện SAU KHI khung nhìn được đính kèm. – Sotti
- 1. Sự khác nhau giữa Activity.runOnUiThread (hành động runnable) và Handler.post() là gì?
- 2. sự khác nhau giữa CONTENT_FILTER_URI và CONTENT_URI là gì?
- 3. Sự khác nhau giữa setWebViewClient và setWebChromeClient là gì?
- 4. Sự khác nhau giữa Smack và aSmack là gì?
- 5. Sự khác nhau giữa Surfaceview và TextureView là gì?
- 6. Sự khác nhau giữa @id và @ + id là gì?
- 7. Sự khác nhau giữa `DialogInterface.dismiss()` và `DialogInterface.cancel()` là gì?
- 8. Sự khác nhau giữa fill_parent và wrap_content là gì?
- 9. Sự khác nhau giữa CPU và Chipset là gì?
- 10. Sự khác nhau giữa Danh sách và ArrayList là gì?
- 11. sự khác nhau giữa touchmove và gesturechange là gì?
- 12. Sự khác nhau giữa WPF và WinForms là gì?
- 13. Sự khác nhau giữa JavaScript và Java là gì?
- 14. Sự khác nhau giữa ODBC và OleDB là gì?
- 15. Sự khác nhau giữa SGML và XML là gì?
- 16. Sự khác nhau giữa DefaultSelenium và RemoteWebDriver là gì?
- 17. Sự khác nhau giữa RMI và Corba là gì?
- 18. Sự khác nhau giữa scgi và wsgi là gì?
- 19. Sự khác nhau giữa wsHttpBinding và ws2007HttpBinding là gì?
- 20. Sự khác nhau giữa Pingback và Trackback là gì?
- 21. Trong Python, sự khác nhau giữa ".append()" và "+ = []" là gì?
- 22. Sự khác nhau giữa AxInterop và Interop là gì?
- 23. Sự khác nhau giữa CellClick và CellMouseClick là gì?
- 24. Sự khác nhau giữa .bashrc, .bash_profile và .environment là gì?
- 25. Sự khác nhau giữa JSP và Facelets là gì?
- 26. Sự khác nhau giữa hg quên và hg là gì?
- 27. Sự khác nhau giữa GDI và GDI + là gì?
- 28. Sự khác nhau giữa đá quý và plugin là gì?
- 29. Sự khác nhau giữa metaClass.methods và metaClass.metaMethods là gì?
- 30. Sự khác nhau giữa kEND và $ end là gì?
câu hỏi tương tự với câu trả lời hữu ích: [Runnable được đăng thành công nhưng không chạy] (http://stackoverflow.com/questions/4083787/runnable-is-posted-successfully-but-not-run), [Whats sự khác biệt giữa Activity.runOnUiThread (hành động runnable) và Handler.post()?] (http://stackoverflow.com/questions/1839625/whats-the-difference-between-activity-runonuithreadrunnable-action-and-handler), [Sự khác biệt giữa Handler.post (Runnable r) và Activity.runOnUiThread (Runnable r)] (http://stackoverflow.com/questions/7452884/difference-between-handler-postrunnable-r-and-activity-runonuithreadrunnable) –