Android 自動產生 VIEW ID
動態產生 Layout 時一定會遇到 ID配置的問題。 在API > 17後有提供一個 View.generateViewId(),只要在新增的LAYOUT物件設定即可 Button btn = new Button(this); btn.setId(View.generateViewId()); 如果需要API<17要如何是好?我們深入View.generateViewId()看看。 private static final AtomicInteger sNextGeneratedId = new AtomicInteger( 1 ); public static int generateViewId () { for (;;) { final int result = sNextGeneratedId.get(); // aapt-generated IDs have the high byte nonzero; clamp to the range under that. int newValue = result + 1 ; if (newValue > 0x00FFFFFF ) newValue = 1 ; // Roll over to 1, not 0. if (sNextGeneratedId.compareAndSet(result, newValue)) { return result; } } } 看樣子,是用AtomicInteger來增加ID。利用compareAndSet(CAS)來查newValue是否可以置入result的記憶體位址中。另外我們也看到,newValue最高到0x00FFFFFF,0x00FFFFFF以上就會從1再開始。也代表0x00FFFFFF以上是保留給系統工具使用。 ...