1. 程式人生 > >Android7.0 View.post與Handler.post

Android7.0 View.post與Handler.post

在獲取view寬高時,在Android6.0中使用handler.post()可以正常獲取,而執行在Android7.0上則無法再獲取。而在7.0上改為view.post()方法則又可以正常獲取view寬高。

檢視原始碼和相關資料後知道是因為,雖然這兩個都是post(new runnable(){}),但兩者最終將訊息傳送到的訊息佇列並不一定相同,區別在於View是否已attach到window上。
而view.post()在 Api23 和 Api24 中,executeActions() 方法的呼叫時機不同,導致 View 在沒有 mAttachInfo 物件的時候,表現不一樣。

驗證測試:
我們在自定義view的layout()方法中新增

@Override
public void layout(@Px int l, @Px int t, @Px int r, @Px int b) {
   super.layout(l, t, r, b);
   Log.i("Demo","================view.layout");
}

在測量使用view的寬高處新增

view.post(new Runnable() {
         @Override
         public void run() {
            Log.i("Demo","----------------view.post"
); } }); new Handler().post(new Runnable() { @Override public void run() { Log.i("Demo","----------------new Handler().post"); } });

執行後可得到結果:
Android6.0:
這裡寫圖片描述
Android7.0:
這裡寫圖片描述

可知Android7.0時,當handler.Post執行時,view還沒有執行layout方法,所以測出的寬高是0,而view.post執行在view的layout後,可以測出正確寬高。

相關推薦

Android7.0 View.postHandler.post

在獲取view寬高時,在Android6.0中使用handler.post()可以正常獲取,而執行在Android7.0上則無法再獲取。而在7.0上改為view.post()方法則又可以正常獲取view寬高。 檢視原始碼和相關資料後知道是因為,雖然這兩個都是post(new runnab

Android7.0 View.postHandler.post

在獲取view寬高時,在Android6.0中使用handler.post()可以正常獲取,而執行在Android7.0上則無法再獲取。而在7.0上改為view.post()方法則又可以正常獲取view寬高。 檢視原始碼和相關資料後知道是因為,雖然這兩個都是p

View#postHandler#post的區別,以及導致的記憶體洩漏分析

簡述: 寫這篇文章的緣由是最近專案中查記憶體洩漏時,發現最終原因是由於非同步執行緒呼叫View的的post方法導致的。 為何我會使用非同步執行緒呼叫View的post方法,是因為專案中需要用到很多複雜的自定義佈局,需要提前解析進入記憶體,防止在

android-View.postHandler.post的區別

View.postDelayed package android.view; public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility

Android7.0上拍照選擇照片Crash問題

在Android7.0系統上,Android 框架強制執行了 StrictMode API 政策禁止向你的應用外公開 file:// URI。 如果一項包含檔案 file:// URI型別 的 Intent 離開你的應用,應用失敗,並出現 FileUriExpo

[Android]View.post(),android7.0(sdk24以上)不執行的問題(部分Click點選事件無效的原因)

我們熟知View.post()和Handler.post(),雖然最後執行過程還會走到Handler的post()方法中,但是View.post()做了許多額外的工作,所以我認為如非迫不得己,建議直接

原始碼詳細解析Activity生命週期onResume中Handler.Post(Runnable)和View.Post(Runnable)的UI效果差異原因

一般需求中會出現在Activity啟動中需要獲取Ui控制元件相關大小或者在介面繪製完成之後重新整理資料,我們都知道在UI繪製完成之後,時機最好,不會阻塞主執行緒導致卡頓或者UI控制元件引數獲取失敗。 也許大家使用過或 知道Handler(MainLooper).

Android 多執行緒之間的通訊互動(Ui執行緒子執行緒之間的通訊)Handler,Handler.post(Runnable runnable),runUiThread方式

工作內容: 1.FrameLayout/OnTouchListener(滑動監聽) 2.生命週期 3.UI執行緒 4.Android中的耗時操作/多執行緒 5.多執行緒中的互動:Handler handler.post(Runnable runnable) 6.多執行緒中

[Angularjs]$http.post$.post

模擬登錄 sss 習慣 angular request方法 ide code 技術 無法 摘要 在angularjs發送post請求的時候,確實很困惑,在傳遞json數據的時候,總會遇到在服務端無法接受到參數的情況,這裏有必要與$.post進行比較學習一下。 一個例子

關於postget的詳細總結

而是 然而 傳遞 長度 史記 是我 com post 真的   近日,對爬蟲的使用增多,總結在日常使用中的一些問題,其中get與post的問題是最需要重點總結的。   首先,在以往的使用經驗中,get與post是最常用的兩種請求方式,最直觀的區別就是get會將參數放在url

頁面下載文件方法,postget

close name input type ear write iframe 自己 style 一般下載文件,常見使用的是window.open(‘url‘);方法進行下載。若需要帶參數,直接在url後面拼接參數,進行傳遞。window.open方法僅可以進行get方法進行

Jquery AJAX POSTGET之間的區別

load wmb data col form put content lencod 2.4 Jquery AJAX POST與GET之間的區別 GET 就是一個相同的URL只有一個結果,瀏覽器直接就可以拿出來進行獲取,比如抓取接口get方式的內容,或者說直接獲取網

POST GET

設置 header bookmark 記錄 請求參數 body 參數 限制 mce POST 和 GET 請求的異同 表層:   GET 在瀏覽?可以回退, 而 POST 則會再次提交請求 GET 的 URL 可以被 Bookmark, ? POST 不可以. GET

JavaWEB HTTP請求中POSTGET的區別

get 和post方法.在資料傳輸過程中分別對應了HTTP協議中的GET方法和POST方法. 主要區別: GET從服務其獲取資料;POST上傳資料. GET將表單中的資料按照variable=value的形式,新增到action所指向的URL後面.並且兩者使用了"?"連線,個個變

postget的對比使用

post與get的對比: @PostMapping("/add") public AssembleJSON add(T entity) throws IllegalAccessException {} @PostMapping("/upd") public AssembleJSON upda

POSTGET區別

POST與GET區別 來源:王練 地址: https://www.oschina.net/news/77354/http-get-post-different GET和POST是HTTP請求的兩種基本方法,要說它們的區別,接觸過

post put的區別

這兩個方法咋一看都可以更新資源,但是有本質區別的 具體定義可以百度,我這裡就不貼了,光說我自己的理解 首先解釋冪等,冪等是數學的一個用語,對於單個輸入或者無輸入的運算方法,如果每次都是同樣的結果,則稱其是冪等的 對於兩個引數,如果傳入值相等,結果也等於每個傳入值,則稱其為冪等的,如min

postget 請求的區別

1,GET和POST與資料如何傳遞沒有關係?? post與get 請求是由HTTP協議定義的,那麼使用那個方式與應用層的資料層如何傳輸是沒有互相關係的。 從而,http就沒有要求,post一定要放到請求體裡面,get就一定要放到url裡面。 因為有各種瀏覽器軟體的實現,就變成get用ur

Volley網路框架之快取載入圖片、Postget的資料請求

         前言:Volley作為主流網路框架之一,必然有它的優點。Volley可是說是把AsyncHttpClient和Universal-Image-Loader的優點集於了一身, 它的常用在資料量不大,但網路通訊頻繁,而且有圖片快取

我所理解的postget請求區別

Get和Post一般的區別:  1.post更安全(不會作為url的一部分,不會被快取、儲存在伺服器日誌、以及瀏覽器瀏覽記錄中)  2.post傳送的資料更大(get有url長度限制)   get傳參最大長度的理解誤區  1)總結  (1)http協議並未規定get和pos