Activity.runOnUiThreadVe View.post, birisi, lütfen açıklayabilir mi? Arasındaki fark nedir ?
Activity.runOnUiThreadVe View.post, birisi, lütfen açıklayabilir mi? Arasındaki fark nedir ?
Yanıtlar:
View.postEtkinliğe doğrudan erişiminiz olmadığında yararlı olması dışında gerçek bir fark yoktur .
Her iki durumda da, UI iş parçacığında değilse Handler#post(Runnable), perde arkasında çağrılacaktır.
Ui parçacığı üzerinde adlandırılan - CommonsWare açıklamada belirtildiği gibi, ikisi arasında bir fark yoktur Activity#runOnUiThreadarayacak runolurken, doğrudan yöntemi View#postyayınlayacağız runnablesıraya (örn çağrı Handler#post)
Önemli olan nokta IMO'nun her ikisinin de aynı amaca sahip olması ve onu kim kullanırsa kullansın, hiçbir fark olmaması (ve gelecekte uygulama değişebilir).
runOnUiThread()mevcut iş parçacığını kontrol eder Runnableve ana uygulama iş parçacığında olursak hemen yürütür . hangi iş parçacığına post()başvurulursa çağrılsın, her zaman Runnablesıraya koyar .
runOnUiThread()Mevcut iş parçacığını kontrol eder ve ana uygulama iş parçacığında olursakRunnable hemen çalıştırır " dedim (vurgu eklendi). "Bu, şu anda UI iş parçacığında olanların yok sayıldığı ve buna birinci öncelik verildiği anlamına mı geliyor?" - "Ne hiç UI iş parçacığı üzerinde şu anda" olduğunu diyoruz. runOnUiThread()
Activity.runOnUiThread ve view.post () arasındaki diğer bir fark, view.post () içindeki çalıştırılabilir öğenin, görünüm bir pencereye eklendikten sonra çağrılmasıdır.
Ya çoğu durum için ve onlar birbirlerinin yerine çoğunlukla kabul edilebilir, ancak bunlar vardır ustaca farklı. Elbette en büyük fark, birinin bir Activityve diğerinin a'dan alınabilmesidir View. Bunlar arasında çok fazla örtüşme vardır, ancak bazen bir'de a'ya Activityerişiminiz olmayacak Viewve bazen bir a'da Viewbir Activity.
İle karşılaştı uç örnekleri biri View.postben geçen başka SO soruya bir cevapView.post : View.postçalışır başka bir iş parçacığı zaman Viewbir pencere takılır. Bu nadiren bir sorun, ancak bazen neden olabilir Runnablearamak, özellikle yürütmek asla View.postiçinde onCreate, aramalarınızdan yöntemle Activity. Yine de bir alternatif, Handler.posthangisinin ne olduğunu Activity.runOnUiThreadve View.postkapakların altında kullanılmasıdır.
(doğruluk için düzenlendi, "başka bir ileti dizisinden" eklendi)
onCreate()mi? Hm, bu durumda Handlertedarik edilene göndermesini bekliyorum ViewRoot.
View.posteklemeliyim Runnable. Kaynakta daha derinlemesine araştırma yapmadım , ancak dokümanlar şöyle diyor: "Bu yöntem, yalnızca bu Görünüm bir pencereye eklendiğinde UI iş parçacığının dışından çağrılabilir." Yani bence şu anki iş parçacığındaysa, o zaman söylediğiniz doğrudur, değilse o zaman muhtemelen sadece Runnable. Bunu kodumda kesinlikle yaşadım.