Ⅰ android更新Ui的幾種方法和見解
利用Looper更新UI界面
2.AsyncTask利用線程任務非同步更新UI界面
3.利用Runnable更新UI界面
Ⅱ android 怎麼開發好的ui界面
好的UI設計和好的實現。
Ⅲ 32個實用酷炫的Android開源UI框架
1.Side-Menu.Android
分類側滑菜單 , Yalantis 出品。
項目地址: https://github.com/Yalantis/Side-Menu.Android
2.Context-Menu.Android
可以方便快速集成漂亮帶有動畫效果的上下文菜單, Yalantis 出品。
項目地址: https://github.com/Yalantis/Context-Menu.Android
3.Pull-to-Refresh.Rentals-Android
提供一個簡單可以自定義的 下拉刷新 實現,Yalantis 出品。
項目地址: https://github.com/Yalantis/Pull-to-Refresh.Rentals-Android
4.Titanic
可以顯示水位上升下降的TextView
項目地址: https://github.com/RomainPiel/Titanic
5.AndroidSwipeLayout
滑動Layout ,支持單個View,ListView,GridView
項目地址: https://github.com/daimajia/AndroidSwipeLayout
Demo地址: Download Demo
6.Android Typeface Helper
可以幫你輕松實現自定義字體的庫
項目地址: https://github.com/norbsoft/android-typeface-helper
7.android-lockpattern
Android的圖案密碼解鎖
項目地址: https://code.google.com/p/android-lockpattern/
Demo地址: https://play.google.com/store/apps/details?id=group.pals.android.lib.ui.lockpattern.demo
文檔介紹: https://code.google.com/p/android-lockpattern/wiki/QuickUse
APP示例:Android開機的圖案密碼解鎖,支付寶的密碼解鎖
8.ToggleButton
狀態切換的 Button,類似 iOS,用 View 實現
項目地址: https://github.com/zcweng/ToggleButton
9.WilliamChart
繪制圖表的庫,支持LineChartView、BarChartView和StackBarChartView三中圖表類型,並且支持 Android 2.2及以上的系統。
項目地址: https://github.com/diogobernardino/WilliamChart
Demo地址: https://play.google.com/store/apps/details?id=com.db.williamchartdemo
Demo項目: https://github.com/diogobernardino/WilliamChart/tree/master/sample
10.實現滑動ViewPager漸變背景色
項目地址: https://github.com/TaurusXi/GuideBackgroundColorAnimation
11.Euclid
用戶簡歷界面, Yalantis 出品。
項目地址: https://github.com/Yalantis/Euclid
12. InstaMaterial
Instagram的一組Material 風格的概念設計
項目地址: https://github.com/frogermcs/InstaMaterial
13. SpringIndicator
使用bezier實現粘連效果的頁面指示
項目地址: https://github.com/chenupt/SpringIndicator
14. BezierDemo
仿qq消息氣泡拖拽 消失的效果。
項目地址: https://github.com/chenupt/BezierDemo
15. FoldableLayout
折疊的信紙被打開一樣的動畫效果
項目地址: https://github.com/alexvasilkov/FoldableLayout
16.Taurus
下拉刷新,Yalantis 出品。(是不是有點似曾相識呢?)
項目地址: https://github.com/Yalantis/Taurus
17. PersistentSearch
在點擊搜索的時候控制項在原有位置顯示輸入框。
項目地址: https://github.com/Quinny898/PersistentSearch
18. circular-progress-button
帶進度顯示的Button
項目地址: https://github.com/dmytrodanylyk/circular-progress-button
19. discrollview
當上下滾動的時候子元素會呈現不同動畫效果的scrollView,網頁上稱之為:視差滾動
項目地址: https://github.com/flavienlaurent/discrollview
20. sweet-alert-dialog
一個帶動畫效果的 自定義對話框樣式
項目地址: https://github.com/pedant/sweet-alert-dialog
21. android-floating-action-button
Material Desig風格的 浮動操作按鈕
項目地址: https://github.com/futuresimple/android-floating-action-button
22. android-collapse-calendar-view
可以在月視圖與周視圖之間切換的calendar控制項
項目地址: https://github.com/blazsolar/android-collapse-calendar-view
22. android-collapse-calendar-view
可以在月視圖與周視圖之間切換的calendar控制項
項目地址: https://github.com/blazsolar/android-collapse-calendar-view
23. NumberProgressBar
個簡約性感的數字進度條
項目地址: https://github.com/daimajia/NumberProgressBar
24. CircularProgressView
CircularProgressView 是通過自定義view的方式實現的Material風格的載入提示控制項,兼容任何版本。
項目地址: https://github.com/rahatarmanahmed/CircularProgressView
25. OriSim3D-Android
opengl 實現了各種折紙效果,模擬了從一張紙折疊成一條船的整個過程
項目地址: https://github.com/RemiKoutcherawy/OriSim3D-Android
26、萬能日歷控制項:CalendarView
GitHub: https://github.com/huanghaibin-dev/CalendarView
中文使用文檔: https://github.com/huanghaibin-dev/CalendarView/blob/master/QUESTION_ZH.md
27、大圖查看器: BigImage ImageView ViewPager
Github: https://github.com/SherlockGougou/BigImageViewPager
地址: https://www.jianshu.com/p/b15e65791c3f
支持超長圖、超大圖的圖片瀏覽器,優化內存,支持手勢放大、下拉關閉、查看原圖、載入百分比、保存圖片等功能。現已支持androidx。
28、安卓工具包androidUntilCode(安卓必備)
Github: https://github.com/Blankj/AndroidUtilCode/blob/master/lib/utilcode/README-CN.md
29、萬能適配器-BRAVH
官網: http://www.recyclerview.org
GitHub: https://github.com/CymChad/BaseRecyclerViewAdapterHelper
RecyclerView
作為Android最常用的控制項之一,是否常常為「她」操碎了心
BRVAH受益群體是所有Android開發者,希望更多開發者能夠一起來把這個項目做得更好幫助更多人
30、智能刷新控制項--SmartRefreshLayout
GitHub: https://github.com/scwang90/SmartRefreshLayout
中文: https://gitee.com/scwang90/SmartRefreshLayout
SmartRefreshLayout以打造一個強大,穩定,成熟的下拉刷新框架為目標,並集成各種的炫酷、多樣、實用、美觀的Header和Footer。 正如名字所說,SmartRefreshLayout是一個「聰明」或者「智能」的下拉刷新布局,由於它的「智能」,它不只是支持所有的View,還支持多層嵌套的視圖結構。 它繼承自ViewGroup 而不是FrameLayout或LinearLayout,提高了性能。 也吸取了現在流行的各種刷新布局的優點,包括谷歌官方的 SwipeRefreshLayout , 其他第三方的 Ultra-Pull-To-Refresh 、 TwinklingRefreshLayout 。 還集成了各種炫酷的 Header 和 Footer。
31、內存泄漏檢測工具--leakcanary
使用方式: https://www.jianshu.com/p/b83ddffcb3b5
LeakCanary是Square公司基於MAT開源的一個工具,用來檢測Android App中的內存泄露問題。官方地址: https://github.com/square/leakcanary
32、 1218683832 / AndroidSlidingUpPanel
SlidingUpPanelLayout:可以上下滑動的菜單布
https://github.com/1218683832/AndroidSlidingUpPanel
Ⅳ Android UI線程
思考:
先必須了解下面2個問題
1.顧名思義 UI線程 就是刷新UI 所在線程
2.UI是單線程刷新
1.對Activity 來說 UI線程就是其主線程
2.對View來說 UI線程就是創建ViewRootImpl所在的線程
可以通過 WindowManager 內部會創建ViewRootImpl對象
好了,進入主題。我們來慢慢揭開面紗。
我們可以分別從幾個方面切入
我們可能都有使用過 runOnUiThread 現在來看看的源碼實現。
可以從上面的源碼 看到
不是UI線程 就用Handler切到Handler所在的線程中,如果是UI線程直接就調用run方法。
Activity的創建:
1.Activity創建:mInstrumentation.newActivity
2.創建Context :ContextImpl (r)
我們經常用這個方法乾的事情就是,要麼在onCreate中獲取View寬高的值。要麼就是在子線程中做一些耗時操作 ,然後post切到對應View所在的線程 來繪制UI操作。那麼這個對應的線程就是UI線程了。
那麼這個UI線程就一定是主線程嗎?
接來繼續來看。它的源碼View:post
mAttachInfo 在dispatchAttachedToWindow 中被賦值 ,也就是在ViewRootImpl創建的時候,所以是創建ViewRootImpl所在的線程。
attachInfo 上面時候為null 呢?在ViewRootImpl 還沒來得及創建的時候,ViewRootImpl 創建是在 「onResume" 之後。所以在 Activity 的 onCreate 去View.post 那麼AttachInfo 是為null 。
當 AttachInfo == null 那麼會調用 getRunQueue().post(action) 。
最終這個Runnable 被 緩存到 HandlerActionQueue 中。
直到ViewRootImpl 的 performTraversals 中 調用dispatchAttachedToWindow(mAttachInfo, 0);, 那麼才會去處理 RunQueue() 中的Runnable。
來張圖 便於理解這個流程
我們有時候去子線程操作UI的時候(如:requestLayout),會很經常見到下面的 報錯日誌:
Only the original thread that created a view hierarchy can touch its views
為什麼會報這個錯誤呢?
翻譯一下:只有創建視圖層次結構的原始線程才能接觸到它的視圖。
也就是操作UI的線程要和ViewRootImpl創建的線程是同一個線程才行,並不是只有主線程才能更新UI啊。
ViewRootImpl創建的線程?那麼 ViewRootImpl 在哪裡被創建的呢?
從上圖可以看到ViewRootImpl創建最開始是從 ActivityThread 的HandleResumeActivity中開始 一直 ViewRootImpl 創建,也就是說ViewRootImpl 對應的UI線程和 ActivityThread 在同一個線程 也就是主線程。
好了 通過上面的講解,上面的問題相信你可以自己回答啦~
Ⅳ android ui 設計的怪異問題 自己的想出來的 望網友快速解答 高懸賞
大小 位置完全一樣不就重合了么?
Ⅵ fiUI是什麼意思
fiUI是國內知名Android第三方團隊傾力打造——FIUI(Future Interactive UI)。
FIUI是國內首個真正意義上第三方團隊製作的Android UI,官方網站是:fiui.org 。org域名是各類組織機構,包括非盈利團體。他們與知名的CM團隊一樣,使用的是org的域名。
Ⅶ Android UI卡頓原因及解決辦法
渲染機制介紹
為了分析UI卡頓,我們有必要理解一下渲染機制,這套渲染機制適用於絕大部分的屏幕渲染,其中包括Android手機等眾多屏幕設備。
渲染的一些重要參數:
屏幕刷新理想的頻率(硬體的角度):60Hz
理想的一秒內繪制的幀數,幀率(屏幕刷新的角度):60fps
這兩個參數都是理想值,指代的都是同一個概念。實際情況中難免會比它們低。在60fps內,系統會得到發送的VSYNC(垂直刷新/繪制)信號去進行渲染,就會正常地繪制出我們需要的圖形界面。Android手機進行繪制的時候,GPU幫助我們將UI組件等計算成紋理Texture和三維圖形Polygons,同時會使用OpenGL---會將紋理和Polygons緩存在GPU內存裡面。
其中,VSYNC:有兩個概念
Refresh Rate:屏幕在一秒時間內刷新屏幕的次數----有硬體的參數決定,比如60HZ,即屏幕每秒刷新60次
Frame Rate:GPU在一秒內繪制操作的幀數,比如:60fps,
基本結論
要達到60fps,就要求:每一幀只能停留16ms。(大概就是1000ms/60 ~= 16ms刷新一次)
內存抖動是因為大量的對象被創建又在短時間內馬上被釋放。
瞬間產生大量的對象會嚴重佔用Young Generation的內存區域,當達到閥值,剩餘空間不夠的時候,也會觸發GC。即使每次分配的對象佔用了很少的內存,但是他們疊加在一起會增加Heap的壓力,從而觸發更多其他類型的GC。這個操作有可能會影響到幀率,並使得用戶感知到性能問題。
Android裡面是一個三級Generation的內存模型,最近分配的對象會存放在Young Generation區域,當這個對象在這個區域停留的時間達到一定程度,它會被移動到Old Generation,最後到Permanent Generation區域。
Android每個16ms就會繪制一次Activity,通過上述的結論我們知道,如果由於一些原因導致了我們的邏輯、CPU耗時、GPU耗時大於16ms( 應用卡頓的根源就在於16ms內不能完成繪制渲染合成過程,16ms需要完成視圖樹的所有測量、布局、繪制渲染及合成 ),UI就無法完成一次繪制,那麼就會造成卡頓。
比如說,在16ms內,發生了頻繁的GC:
在第一個16ms內,UI正常地完成了繪制,那麼屏幕不會卡頓。
在第二個16ms內,由於某些原因觸發了頻發的GC,UI無法在16ms內完成繪制,就會卡頓。
UI卡頓外部和內部常見原因
下面總結一些常見的UI卡頓原因:
1.內存抖動的問題
2.方法太耗時了(CPU佔用)
1) CPU計算時間,CPU的測量、布局時間
2)CPU將計算好的Polygons和Texture傳遞到GPU的時候也需要時間。OpenGL ES API允許數據上傳到GPU後可以對數據進行保存,緩存到display list。因此,我們平移等操作一個view是幾乎不怎麼耗時的 。
3) GPU進行格柵化
當我們的布局是用的FrameLayout的時候,我們可以把它改成merge,可以避免自己的幀布局和系統的ContentFrameLayout幀布局重疊造成重復計算(measure和layout)。
使用ViewStub:當載入的時候才會佔用。不載入的時候就是隱藏的,僅僅佔用位置。
CPU優化建議
針對CPU的優化,從減輕加工View對象成Polygons和Texture來下手:
View Hierarchy中包涵了太多的沒有用的view,這些view根本就不會顯示在屏幕上面,一旦觸發測量和布局操作,就會拖累應用的性能表現。那麼我們就需要利用工具進行分析。
如何找出裡面沒用的view呢?或者減少不必要的view嵌套。
我們利用工具:Hierarchy Viewer進行檢測,優化思想是:查看自己的布局,層次是否很深以及渲染比較耗時,然後想辦法能否減少層級以及優化每一個View的渲染時間。
我們打開APP,然後打開Android Device Monitor,然後切換到Hierarchy Viewer面板。除了看層次結構之外,還可以看到一些耗時的信息:
三個圓點分別代表:測量、布局、繪制三個階段的性能表現。
1)綠色:渲染的管道階段,這個視圖的渲染速度快於至少一半的其他的視圖。
2)黃色:渲染速度比較慢的50%。
3)紅色:渲染速度非常慢。
GPU優化建議就是一句話:盡量避免過度繪制(overdraw)
一、背景經常容易造成過度繪制。
手機開發者選項裡面找到工具:Debug GPU overdraw,其中,不同顏色代表了繪制了幾次:
Ⅷ Android UI 渲染
概要: 一個view想要渲染到屏幕上,底層需要將view轉化為像素點內容,每一個view的測量和重繪都是一個轉化像素點內容的過程的第一步;每一個view的繪制,比如Textview.setText()或者textview.invalidate()等都將遞歸到ViewRootImpl類,調用ViewRootImpl.performTraversals(此方法從窗口的最頂層DecorView開始測量performMeasure()、布局performLayout()、重繪 performDraw操作,當然google工程師進行了很多判斷,防止不必要的繪制操作)
友情鏈接:https://www.jianshu.com/p/86d00bbdaf60