亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

安卓基礎面試題

2019-11-09 16:20:27
字體:
來源:轉載
供稿:網友
10:簡述Android操作系統的四層架構·linux內核層:C/C++/匯編等·系統運行庫和運行時(含Dalvik虛擬機):C/C++·應用框架層(Framework層):java為主·應用層:Java11:簡要介紹SDK的目錄結構·platform:不同平臺版本·build-tools:編譯工具·tools:通用工具·platform-tools:平臺版本工具·sources:源碼·system-images:系統鏡像(模擬器使用)·extras/android/m2repository/:support包所在位置·SDK Manager:SDK管理器·AVD Manager:虛擬設備管理器12:Android應用的五種基本布局是什么?分別有何特點?·FrameLayout:幀布局,子元素對齊左上角依次層疊放置·LinearLayout:線性布局,橫向或縱向排列子元素,支持按權重排列子元素·RelativeLayout:相對布局,子元素可相對于父控件上下左右居中對齊、子元素可以與兄弟元素上下左右對齊、子元素可以位于兄弟元素的上下左右方位,默認的子元素排列方式與FrameLayout相同·AbosoluteLayout:絕對布局,指定子元素的坐標來確定子元素的位置·TableLayout:表格布局13:ImageView的scaleType屬性有哪幾種取值,分別代表什么含義?·matrix:從圖片的左上角開始截取【ImageView的寬高所定義的像素數量】,如果ImageView的寬高超出圖片的像素數,則顯示全部,不縮放;·fitXY:強行將圖片拉伸到控件的寬高;--------------------------------------------------·fitStart:自動縮放到填滿寬高之一,然后居左或居頂放置(取決于控件是“長的”還是“扁的”)·fitEnd:自動縮放到填滿寬高之一,然后居右或居底放置(取決于控件是“長的”還是“扁的”)·fitCenter:居中顯示全部,并自動縮放到填滿寬高之一(取決于控件是“長的”還是“扁的”)* fitXXX系列的共同點是:都會縮放以顯示全部,并充滿寬高之一--------------------------------------------------·center:不縮放,顯示圖片的正中間部分·centerInside:居中顯示全部,圖片小于控件時不縮放·centerCrop:縮放以填充長邊,顯示圖片的正中間部分14:如何定義和使用樣式?·在res/values/styles.xml下定義新的style·指定其名稱、父類(有parent="XXX"和XXX.XXX兩種方式)·指定具體布局屬性和屬性值·布局文件中引用該樣式:style="@style/XXX"15:如何制作一個自定義樣式的進度條?·先引用系統樣式(環形或水平)·追蹤系統樣式定文件的位置·拷貝、重命名和修改系統樣式,主要包括:進度環美術資源、進度美術資源、二級進度美術資源、手柄美術資源、尺寸大小等·引用自定義樣式后的進度條16:闡述ListView的復用原理·在listView的滾動過程中,convertView是被系統自動回收復用的,因此我們通過關聯布局文件holder到convertView,實現布局的復用;·首次加載第一屏數據時,沒有可以復用的convertView,因此加載布局文件·將布局文件中的控件丟給holdr對象保管,holder對象交給convertView保管(setTag)·當列表不再是首次加載第一屏時,有可以復用的convertView(滾出屏幕外的item的convertView會被系統回收,并復用到新滾入的item中)·此時從convertView中拿出上次保管起來的holder(getTag),進而拿出控件并一一設置值17:如何處理ListView的ITEM及ITEM內控件的點擊事件沖突?·如果item內有Button、ImageButton等強焦點控件,則item的點擊事件會失效·因此如果要item整體、item內的子控件有各自獨立的點擊事件,就不要使用Button、ImageButton等強焦點控件,而是使用TextView等弱焦點控件替代之;·在item整體沒有焦點的時候,使用【item根布局的點擊事件】代替【item本身的點擊事件】也是一種常見的做法;18:簡述ExpandableListView的用法·界面布局、找出控件的方式與ListView相同;·適配器繼承BaseExpandableListAdapter并實現其中方法;·getGroupCount()和getGroupView()定義了組的數量和顯示外觀;·getChildrenCount()和getChildView()定義了組下組員ITEM的數量和顯示外觀;·數據多采用Map<Integer,List<Bean>>結構存儲,Integer為組序號,List為組內的數據集合;·isChildSelectable()方法須返回true,以使childItem有點擊事件;* 著重講明原理,方法名記個大概即可19:drawNinePatch的四條黑邊分別代表什么?·左上兩條黑線相交區域代表控件的可拉伸范圍;·右下兩條黑線相交區域代表內容呈現的位置;1A:gravity和layout_gravity有和區別?·gravity指的是孩子和自己的對齊方式;·layout_gravity指的是自己和父控件的對齊方式;20:簡述startActivityForResult的用法·AActivity使用startActivityForResult()方法啟動BActivity,配置一個requestCode;·當BActivity結束前,通過setResult(RESULT_OK,intent)方法向AActivity返回結果;·BActivity結束時,AActivity通過onActivityResult(int requestCode, int resultCode, Intent data)覆寫方法獲得BActivity的返回結果;·onActivityResult()方法內的邏輯一般為:比對請求碼是否和當初相同;結果碼是否為RESULT_OK;從返回Intent中獲取和處理返回數據;21:如何將一個Activity配置為應用的默認啟動項,不配可不可以,配置多個會如何?·配置其intentFilter的行為為ACTION_MAIN,類別為CATEGORY_LAUNCHER;·可以不配,但這樣不會在程序列表中形成啟動圖標,用戶無法手動啟動應用;·可以配多個,這種情況下會以第一個作為默認啟動項;22:如何為Activity定義和使用菜單?·在res/menu中定義菜單資源,指定每個菜單項的title、id、icon、顯示方式等;·覆寫onCreatOptionsMenu()方法和onOptionsItemSelected()方法;·在onCreatOptionsMenu()中加載菜單資源:getMenuInflater().inflate(R.menu.menu_main,menu);·在onOptionsItemSelected()方法中定義菜單的點擊監聽事件;23:Intent可以傳遞哪些類型的數據?·基本數據類型,包括String;·基本數據類型數組(包括String數組);·Bundle數據包·Serializable和Parcelable24:Activity的生命周期按順序依次是什么?·onCreate·onStart·onResume·onPause·onStop·(經由onRestart返回onStart)·onDestory25:簡述Activity在不同狀態下被回收的可能性·運行狀態(onStart)——基本不回收·暫停狀態(onPause)——不傾向回收·停止狀態(onStop)——比較容易被回收·消亡狀態(onDestroy)——隨時被收回26:打開一個應用,返回桌面,然后再次返回應用,Activity經歷了怎樣的生命周期?·onCreate-onStart-onResume;·點擊home鍵;onPause-onStop;·重新打開;onRestart-onStart-onResume27:進行橫豎屏切換時,Activity經歷了怎樣的生命周期?(分類討論)·常規切換橫豎屏:onCreate-onStart-onResume;豎屏切橫屏;onPause-onStop-onDestroy;onCreate-onStart-onResume·切換橫豎屏并保存狀態:onCreate-onStart-onResume;豎屏切橫屏;onPause-onSaveInstanceState-onStop-onDestroy;onCreate-onStart-onRestoreInstanceState-onResume一存一取,分別發生在:不可見之前,重新可見了以后·清單文件中配置有android:configChanges="orientation|screenSize":onCreate-onStart-onResume;豎屏切橫屏;onConfigurationChanged;28:為避免Activity的異常消亡和數據丟失,應如何做?·覆寫onSaveInstanceState,在即將不可見之前保存數據;·覆寫onRestoreInstanceState,在重新可見以后恢復保存的數據;29:打開一個Activity,點擊跳轉按鈕跳轉到一個Dialog風格的Activity,然后點返回,其間兩個Activity分別經歷了怎樣的生命周期?假設主Activity和窗口Activity分別為:MA、DA·MAonCreate-MAonStart-MAonResume;·按鈕跳轉;MAonPause-DAonCreate-DAonStart-DAonResume;·點擊back鍵;DAonPause-MAonResume-DAonStop-DAonDestroy2A:Activity的啟動模式有哪幾種,分別有何特征?·standard:標準,每次startActivity時都會新建一個該Activity的實例,并置于棧頂;//無限堆疊·singleTop:棧頂單例,startActivity時,如果棧頂有該類的實例,就復用之,否則就新建實例置于棧頂;·singleTask:任務棧中單例,startActivity時,如果棧中有該類的實例,就將其上層的其它實例全部彈出,沒有就新建實例并置于棧頂;//踹飛模式·singleInstance:絕對單例,獨占一個任務棧,startActivity時,如果沒有該類的實例,就在新的任務棧中新建一個該實例,并將該棧置于頂部,如果有就將其所在的任務棧切換到窗口頂層;//一人一棧2B:Intent的七大屬性是什么,分別有何含義?·ComponentName:顯式地指定要啟動的活動的包名或類名;·Extra:為意圖攜帶額外參數;·Action:指定要啟動的活動的行為,隱式地啟動具有某種特定功能的活動;·Category:指定要啟動的活動的類別,與行為共同作用縮小要啟動的活動的范圍,從而實現隱式啟動活動;·Data:為意圖攜帶Uri類型的參數,如網址、文件地址、郵箱、電話等;·Type:用于指定Data數據的Mime類型,如imag/png、audio/*等;·Flag:額外標記,一般用于指定以何種啟動模式啟動活動;2C:什么是有序廣播和無序廣播,有何區別?·無序廣播又稱普通廣播,以sendBroadcast()方式發送;·無序廣播的處理中,高優先級接收器不能屏蔽低優先級接收器,也不能篡改廣播數據;·有序廣播的發送方式為sendOrderedBroadcast();·有序廣播的處理中,高優先級接收器能夠屏蔽低優先級接收器對廣播的接收和處理:abortBroadcast();·有序廣播的處理中,高優先級的接收器還可以篡改廣播數據,如:setResultData(newString)或setResultExtras(newBundle);·注意:所謂數據篡改,僅僅是resultData或resultExtras,不包括Intent攜帶的一般數據;2D:廣播接收器的靜態注冊和動態注冊有何區別?·靜態廣播接收器是注冊在Manifest中的;·靜態廣播接收器理論上常駐系統內存的,不需要啟動應用界面;·靜態廣播接收器一般用于收聽系統級別的廣播:比如收聽開機廣播,收聽來電廣播等;·動態廣播接收器是在運行時動態注冊和注銷的,分別通過retisterReceiver()和unregisterReceiver()方法;·動態廣播一般用于應用內的通信;30:安卓應用的數據存儲方式有哪幾種?分別適用于何種場景?·SharedPReference:輕量級數據的本地存儲;·文件系統存儲:文檔、圖片、音頻視頻、壓縮包等二進制文件數據的本地存儲;·SQLiteDatabase:結構化數據的本地存儲;·網絡存儲:將數據上傳保存到服務端;·ContentProvider:設備內的跨進程數據共享;32:用戶手動執行清除緩存和清除數據操作時,分別會清空哪兩個文件夾中的數據?·【外部存儲】中的【程序私有目錄】下的數據緩存文件夾及數據文件夾;·即:/Android/data/包名/files目錄和/Android/data/包名/Cache目錄;·程序卸載時,這兩個目錄及其數據會被一并刪除;35:SQLite數據庫支持的五種基本數據格式是什么?·整型-INTEGER·浮點型-REAL·字符串-TEXT·二進制-BLOB·空-NULL36:如何在程序中獲取到SQLiteDatabase對象的實例?·SQLiteDatabase db =  context.openOrCreateDatabase("db605.db", MODE_PRIVATE, null);·通過SQLiteOpenHelper實例去getReadableDatabase()或getWritableDatabase();37:如何將一條用戶的信息(姓名,性別,年齡)存儲到SQLite數據庫?·獲取到數據庫對象,可以通過openOrCreateDatabase()方法或sQLiteOpenHelper.getWritableDatabase()方法;·通過執行SQL語句實現實現插入:db.execSQL("insert into tb_user(name,gender,age) values('zhangsan','male',20)");·通過SQLiteDatabase的API實現插入:db.insert(...);·db.insert()方法插入的數據對象為ContentValue,需要先將用戶信息以鍵值對方式存儲到ContentValue對象中才能執行insert();38:對SQLite數據庫進行增刪改操作的方式有哪幾種?查詢的方式有哪幾種?·增刪改操作都有兩種選擇:即通過db.execSQL(sql)或SQLiteDatabase的API(insert、delete、update);·查詢也是sql語句和API兩種選擇,但API分別為:db.rawQuery(sql)和db.query();·查詢結果為Cursor數據游標,需要遍歷解析Cursor獲得最終結果;39:一個應用的SQLite數據庫的存放在什么位置?·設備的運行內存空間(非外存,用戶無法手動訪問)中的data/data/<包名>下;3A:說出幾種跨應用(跨進程,ipC)共享數據的方式,安全的方式是什么?·通過意圖啟動遠程活動;·發送和接收全局廣播;·綁定和調用遠程服務(AIDL,Messenger);·通過ContentResolver遠程訪問ContentProvider共享出來的數據;·其中遠程服務綁定和ContentProvider分別是安卓推薦的相對安全的遠程服務和數據訪問方式;3B:請簡述ContentProvider跨應用共享數據的原理·CP所在的應用(服務端)維護著一個可以共享的數據庫·服務端注冊ContentProvider,并聲明exported="true",即該CP可以被遠程應用(客戶端)訪問·CP定義數據訪問規則,即Uri,通過UriMatcher將不同的Uri匹配到不同的訪問標的(數據表)·CP定義并對外拋出增刪改查接口,其參數Uri代表了將要增刪改查的數據標的(數據表)·遠程應用通過獲取ContentResolver對象·遠程應用通過調用CR的增刪改查(配以相應的Uri和參數),獲取到CP的增刪改查所返回的數據,即實現了對CP端數據的訪問·對系統CP提供的數據的訪問往往要聲明對應的權限3C:當我們注冊四大組件時,如何使該組件能被其它應用訪問?·在注冊時聲明:exported=true3D:什么是數據庫事務?其特點如何?·批量執行的增刪改操作;·其執行結果要么全部成功,要么全部失敗;·如事務失敗則所有【本次事務中已執行的操作】全部回滾至執行前的狀態;41:安卓動畫分為哪幾種,分別有何特點;·逐幀動畫FrameAnimation:逐幀播放圖片;·補間動畫TweenAnimation(又稱視圖動畫ViewAnimation):只改變視圖的“影像”,不能實際上改變視圖的實際屬性;·屬性動畫PropertyAnimation:既改變視圖的視覺屬性,又不影響其點擊事件時使用;·布局動畫LayoutAnimation:定義ViewGroup中孩子的出場方式的動畫;42:屬性動畫和補間動畫有何區別?·補間動畫改變的只是View的“影像”,其實質屬性并未發生變化,點擊事件仍存在與視圖變化前的位置;·屬性動畫是真正改變了View的屬性,包括位置大小透明度旋轉角度等,點擊事件的響應區域也響應發生了變化;·屬性動畫能改變的不僅僅是View的視覺屬性,還可以是任何對象的任何屬性,開發者可以在過程回調中進行任意操作從而實現動畫效果;43:簡述碎片回退棧的入棧和出棧規律;·每個Activity都維護有一個自己的碎片回退棧;·入棧方式:在fragmentTransaction提交之前執行fragmentTransaction.addToBackstack(null)將當前要提交的碎片添加到回退棧;·當用戶點擊返回物理鍵時,會先將碎片回退棧中的碎片實例一一彈出,然后才會彈出Activity的實例;44:簡述Fragment和Activity如何實現通信?·活動的FragmentManager通過id或tag可以找到布局中定義的靜態碎片:·活動的FragmentManager通過tag可以找到動態加載的碎片(需要在replace時設置tag參數):·活動在創建碎片實例時,可以進行初始化傳參:MyFragment fragment = new MyFragment();fragment.setArguments(bundle);·碎片找【宿主活動】進而調用:Activity activity = getActivity();·最后的也是最重點的——接口回調,其步驟為:碎片定義接口、【接口實例】、【接口實例】的Setter方法;活動實現碎片的回調接口;活動調用碎片的Setter方法,將自身設置為碎片的【接口實例】;碎片在觸發業務時回調【接口實例】的實現方法;45:按順序說出Fragment的生命周期;·對比活動的聲明周期,碎片的生命周期可以概括為:前四后三中間同--------------------·onAttach·onCreate·onCreateView·onActivityCreated--------------------·onStart·onResume·onPause·onStop--------------------·onDestroyView·onDestroy·onDetach45:簡述Fragment的生命周期和Activity生命周期的聯動規律;·生長階段:Activity先生長,Fragment再生長,即:AonCreate -> FonAttach,FonCreate,FonCreateView,FonActivityCreatedAonStart -> FonStartAonResume -> FonResume·消亡階段:Fragment先消亡,Activity再消亡,即:FonPause -> AonPauseFonStop -> AonStopFonDestroyView,FonDestroy,FonDetach -> AonDestory46:說出幾種Fragment的常用優化方案;·將經常使用的碎片實例抽取為屬性;·保證每個碎片實例中onCreateView()只加載一次布局;·對于常用的碎片實例,使用add()配合hide/show()替代replace();51 什么是ANR?如何防治?·applicationNotResponding——應用程序無響應;·一般地,當應用程序在5秒以內無法響應用戶的交互時,操作系統就會拋ANR,詢問用戶繼續等待還是強制關閉;·為什么會無響應呢?——因為主線程被阻塞了!·防治的辦法就是:不要在UI線程中做耗時操作,耗時操作交給子線程;52 什么是OOM?如何防治圖片過多過大造成的OOM?√ OutOfMemory,不良代碼創建了【太大或太多的對象實例】,且用完沒有及時釋放,導致運行內存超過了系統分配的上限(爆內存),從而使應用異常退出,的現象;√ 更改圖片的顏色模式減小其內存開銷;√ 更改圖片的采樣率減小其內存開銷;√ 用完的圖片及時回收:bitmap.recycle();√ 使用軟弱引用替代強引用指向Bitmap對象:if(softReference.get()!=null){iv.setImageBitmap(softReference.get());}else{Bitmap bitmap = getBitmap();//重新獲取圖片softReference = new SoftReference<Bitmap>(bitmap);//軟引用指向圖片bitmap = null;//釋放強引用iv.setImageBitmap(softReference.get());}√ 使用三級緩存策略,用LruCache管理圖片的內存緩存,給內存開銷指定一個安全上限;53 簡述什么是圖片的三級緩存策略,并簡要介紹相關API;·三級緩存是指:內存-文件系統-網絡;·即當有一個Bitmap請求時,先查看內存中是否有該圖片的對象,內存沒有再去查看文件系統中是否有,最后再去聯網下載;·LruCache是內存緩存的常用工具類,其算法原理為:最近最少使用的圖片對象會被踢出緩存;·LruCache在構造實例時可以配置一個大小,在sizeOf覆寫方法中指定每張具體的Bitmap的大??;·LruCache實例對外拋出put()和get()接口對應著圖片對象的存和?。?4 什么是圖片的二次采樣?其原理是什么?·圖片的像素數量過多時,不但消耗大量內存,還常常導致顯示失?。弧ざ尾蓸又傅氖牵壕鶆虻貋G棄圖片的一部分像素,以使圖片的內存開銷降低;·BitmapFactory.Options.inSampleSize屬性定義了圖片的二次采樣率,其值為2的整數冪,例如當采樣率為4時,代表只均勻采集原有1/4的像素數量形成新的圖片;·當我們使用BitmapFactory來生成圖片時,常常會使用到二次采樣;55 圖片的顏色模式有哪幾種?內存開銷分別如何?·ALPHA_8——只有透明度通道,占用一個字節8位,有256個不同透明度梯度·RGB_565——有紅綠藍三個通道,每像素占用2字節16位,紅綠藍分別占5、6、6位,即32種不同梯度,顯示效果可以接收,是一種常用的效果和開銷都比較折中的顏色模式·ARGB_4444——有透明度和紅綠藍四個通道,每像素占用2字節16位,每個通道占用4位,即16種不同梯度,顯示效果較差·ARGB_8888——有透明度和紅綠藍四個通道,每像素占用4字節32位,每個通道占用8位,即256種不同梯度,顯示效果好,是安卓默認的顏色模式56 簡述安卓的線程通信原理;(Looper/Handler機制,消息機制)·可以從以下三個大塊來回答:----------------------------------------@ 消息傳遞和處理流程:·假定A線程要發送消息給B線程;·A線程創建消息;·讓B線程的Handler把消息取回家(bHandler.sendMessage(msg););·bHandler將消息丟到消息隊列MessageQueue的末尾;·B線程的“消息循環器”Looper不斷輪詢和彈出MessageQueue頭部的消息,丟給Handler處理;·Handler處理消息;----------------------------------------@ 如何創建消息循環系統:·主線程有默認的【消息循環系統】·子線程默認是沒有【消息循環系統】的(Looper和MessageQueue);·創建的方式是(run方法中):Looper.prepare();//創建LooperbHandler = new Handler(){handleMessage(Message msg){...}};//為線程創建HandlerLooper.loop();//讓Looper開始工作----------------------------------------@ Handler的線程歸屬問題:·Handler處理消息和提交的Runnable都運行在Handler所屬的線程;·正常情況下,Handler在哪條線程賦值,就屬于哪條線程——因為它持有了該條線程的Looper;·本質上,Handler持有哪條線程的Looper,它就屬于哪條線程;57 簡述異步任務和線程的異同;·相同點:都是在子線程完成特定操作,線程在run()方法中,異步任務在doInBackground()方法中;·不同點:·異步任務提供了更多的過程回調,分別為:預執行回調onPreExecute()、進度更新回調onProgressUpdate()、提交結果回調onPostExecute();·異步任務的上述三個回調是執行在主線程的(封裝了主線程的handler),因此可以直接操作UI;58 同樣是在后臺執行耗時操作,使用服務和線程的區別是什么?·服務中的代碼默認是執行在主線程的;·服務是不易被殺死的(即使被殺死也有復活機制),因此(一定程度上)能確保業務被完成;·而線程在活動退出后,一來不便提交執行結果,二來在失去引用的情況下,有被提前殺死的風險;****************************·服務本身是上下文對象,因此可以方便地調取資源、啟動活動、發送廣播等,服務中能做的操作更靈活多變;·服務本身就能夠開辟和維護線程;59 服務的兩種啟動方式有何異同?·服務的兩種啟動方式為startService()和bindService();@相同點:·都只會生死一次:onCreate(),onDestory()只會執行一次;@啟動式服務:·啟動之后的Service對象是獨立存在的;·主調者不易獲得Service對象;·onStartCommand()會不厭其煩地響應startService();·要想結束服務,必須顯式地停止服務stopService(),或stopService()、stopSelf()、stopSelfResult()----------------------------------------@綁定式服務:·啟動之后的Service對象會與主調者同生死——即主調者退出,服務亦會隨之解綁和銷毀;·主調者可以通過IBinder和ServiceConnection得到Service對象實例;·onBind()響應bindService(),只能綁定一次;·unbindService()或主調退出,都會導致服務死亡;----------------------------------------@交替著對同一服務類執行啟動/停止、綁定/解綁動作:·onCreate()只會執行一次,即初次的啟動或綁定;·一旦有綁定的動作,則服務的結束只能通過unbindService()或主調的退出;61 dp、sp、px有何不同?·px,Pixels,像素,一個物理像素點;·dp,Density-Independent Pixels,密度無關的像素,在不同密度的設備上dp將以不同方式換算為px(而用戶感覺它們的大小是相近的,所以稱為“密度無關”);·sp,Scale-independent Pixels,大小無關的像素,被用來在不同設備上兼容字體大小;62 何為碎片化?說說你是如何進行屏幕適配的;·所謂碎片化,主要指的是不同的安卓設備,其像素密度、屏幕尺寸各不相同;·其次是指不同廠家對操作系統的不同定制,導致不同品牌和型號的安卓手機的用戶體驗差異較大;·屏幕適配的方式可以概括為:針對不同屬性(密度、尺寸、橫豎屏、語言等)的設備,生成不同后綴名的資源文件夾,在運行時根據就近原則動態匹配資源;·屏幕適配的常用技巧包括:多用權重,少用具體值;一套layout + 多套(不同密度的)dimen;63 如何自定義View的屬性?·在res/values/attrs.xml中創建</declare-styleable>節點;·聲明控件名稱、屬性名稱、屬性類型;·在布局文件中引用上述自定義屬性時需要引入自定義的命名空間;·在View的構造方法中,我們可以從AttributeSet參數中獲取到布局文件中配置的自定義屬性值,其形式為TypedArray對象;·從TypedArray對象中逐個拿出自定義的屬性值并做業務處理;64 自定義View需要覆寫哪幾個方法?其職能分別是什么?·覆寫構造方法——獲取和解析自定義屬性值;·覆寫onMeasure()——根據父控件給出的建議寬高(封裝在widthMeasureSpec和heightMeasureSpec),計算自己想要的寬高,即測量寬高;  ——多數時候,主要是處理一下當寬高聲明為wrap_content時,該設置多少寬高:  ——如果是自定義ViewGroup,還需要向自己的孩子給出建議寬高,即widthMeasureSpec和heightMeasureSpec;·覆寫onDraw()——主要用于自定義View中,完成對自身的繪制;·覆寫onLayout()——主要用于自定義ViewGroup中,定義孩子的排列規則:65 說說onMeasure()方法的兩個參數widthMeasureSpec和heightMeasureSpec分別代表什么含義?·這兩個參數封裝了【寬高模式】和【父控件建議的寬高值】(我們對onMeasure()的覆寫即意味著我們不打算采用父控件建議的寬高值作為自己的測量寬高)·寬高模式為以下三種之一:MeasureSpec.EXACTLY——精確模式,即布局中指定了具體的尺寸:match_parent或具體值;MeasureSpec.AT_MOST——至多模式,以父控件的寬高為上限,布局中指定的是wrap_content;MeasureSpec.UNSPECIFIED——未指定,父控件對當前控件未加限制,想要多少給多少,用的很少;(一般聲明于ScrollView條目或列表的條目中)·當布局文件中的寬高配置為match_parent時,建議寬高值就是父控件的寬高;·當布局文件中的寬高配置為具體值時,建議寬高值就是配置的具體值;·當布局文件中的寬高配置為wrap_content時,建議寬高值因父控件而異,一般的實現為父控件的寬高;66 如何刷新一個View,你能說出幾種方式?分別有何異同?如何刷新一個ViewGroup?·View的動態刷新API為:view.invalidate()和view.postInvalidate();·上述兩個方法功能相同,即觸發View的onDraw()方法,但線程中只能調用postInvalidate();·ViewGroup的刷新方式為:viewGroup.requestLayout()——這個方法會去調用VG的onLayout()使之重新排列孩子;68 簡述安卓的事件派發和消費原理(重要);·事件:用戶的觸屏交互行為,可以細分為三個不同動作:MotionEvent.ACTION_DOWN、MotionEvent.ACTION_MOVE、MotionEvent.ACTION_UP·派發:在Activity及其布局樹(View Hirarchy)中的多級ViewGroup和View之間派發事件,決定事件該有誰(們)來處理;·消費:對事件的處理稱之為消費,同一事件可以有多次【二次消費】,直到某一級標注【消費干凈】;·滑動沖突:觸屏事件發生在多個【可滾動控件】的交叉區域,【系統默認的事件派發和消費結果】不能令人滿意的現象——如何令人滿意?重寫相關控件的派發、攔截和消費方法;----------------------------------------@派發:·boolean dispatchTouchEvent(MotionEvent event)·返回值含義:派發過程中,自己或下級【是否已將事件消費干凈】,true=事件已消費干凈----------------------------------------@攔截:·boolean onInterceptTouchEvent(MotionEvent ev)·返回值含義:派發過程中的每一級VG都有權決定是否攔截,攔截則【隧道式派發】終止,開始【冒泡式消費】,true=攔截----------------------------------------@消費:·boolean onTouchEvent(MotionEvent event)·返回值含義:true=事件已消費干凈,上級不必再做【二次消費】----------------------------------------·派發和消費的流程可以歸納為:隧道式(即自上而下地:Activity-ViewGroup-View)派發,冒泡式(即自下而上地:View-ViewGroup-Activity)消費·事件發生;·Activity的dispatchTouchEvent開始派發事件(注意:返回值不是立即獲得,而是在整個事件派發和消費的結尾才返回);·事件逐級派發到ViewGroup,ViewGroup決定是否要攔截——攔截則從自己開始冒泡式消費,不攔截則繼續向下派發;·事件派發到終端節點View,開始冒泡式消費;·每一級View或ViewGroup都可以通過onTouchEvent的返回值true或false標注【事件是否已被消費干凈】;·消費干凈則再無二次消費,自下而上所有的dispatchTouchEvent全部返回true直至Activity的dispatchTouchEvent;·沒消費干凈,則本級dispatchTouchEvent返回false,上級onTouchEvent將繼續做二次消費;·布局樹中沒人將事件消費干凈,Activity的onTouchEvent將做最終的消費;·最終消費結果為true,Activity的dispatchTouchEvent返回也是true,則繼續接收和派發【本次事件的后續動作】;·最終消費結果為false,Activity的dispatchTouchEvent返回也是false,則【本次事件的后續動作】將全部被丟棄,直至下次事件發生;69 說說使用SVN需要注意的要點;·提交之前一定要先Update,以使沖突暴露出來;·處理沖突:要和沖突方隊友取得一致的版本后(除非你自己很有把握),再刪除沖突標記,標記為沖突已解決,再提交;·勤提交,每日至少提交一次是多數團隊的開發準則之一;·盡量做原子提交,而非大面積的粗暴提交,這樣便于沖突的發現處理,以使風險可控;·避免犯一些常見的禁忌,例如:擅自單方面地修改文件或文件夾名稱;擅自單方面地將文件或文件夾去版本控制;以上兩種操作都會使隊友副本中對應的文件失去版本控制;
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
8090理伦午夜在线电影| 日本精品视频在线播放| 中文字幕一区二区三区电影| 欧美片一区二区三区| 中文字幕精品—区二区| 在线成人激情视频| 热久久美女精品天天吊色| 国产精品毛片a∨一区二区三区|国| 日韩视频第一页| 全亚洲最色的网站在线观看| 欧美日韩在线观看视频小说| 国产精品91久久久久久| 午夜精品一区二区三区在线视频| 91精品国产高清| 91欧美精品午夜性色福利在线| 国产精品av在线播放| 国产免费成人av| 97久久精品国产| 国产欧美精品va在线观看| 69久久夜色精品国产69| 97涩涩爰在线观看亚洲| 亚洲一区二区三区777| 91免费电影网站| 91精品久久久久| 中文字幕日韩av电影| 欧美激情网站在线观看| 国产日韩欧美另类| 国产精品久久久久免费a∨| 中文字幕九色91在线| 欧美裸体xxxx| 成人a视频在线观看| 亚洲国产一区二区三区在线观看| 精品美女永久免费视频| 日本精品一区二区三区在线| 91精品久久久久久久久久久久久| 亚洲国产小视频| 国产精品自产拍高潮在线观看| 久久艹在线视频| 岛国av一区二区三区| 日韩欧美一区二区在线| 美日韩丰满少妇在线观看| 国产一区二区三区在线播放免费观看| 日韩精品欧美激情| 国产精品久久久av| 欧美巨大黑人极品精男| 国产亚洲一区二区在线| 欧美视频在线观看 亚洲欧| 美女福利精品视频| 久久久久久国产三级电影| 国产91色在线| 成人免费福利视频| 18性欧美xxxⅹ性满足| 7777kkkk成人观看| 91亚洲永久免费精品| 久久九九国产精品怡红院| 亚洲国产欧美日韩精品| 色偷偷综合社区| 欧美肥婆姓交大片| 91精品国产自产在线老师啪| 色午夜这里只有精品| 国产亚洲精品综合一区91| 亚洲xxx自由成熟| 国模精品视频一区二区三区| 国产精品丝袜白浆摸在线| 法国裸体一区二区| 成人免费看黄网站| 亚洲成人网在线| 黄网站色欧美视频| 中文字幕在线成人| 久久久久国产视频| 久久精品福利视频| 亚洲国产精品va在线看黑人动漫| 黑人巨大精品欧美一区二区免费| 久久精品99无色码中文字幕| 国产91精品青草社区| 欧美黑人极品猛少妇色xxxxx| 一本色道久久综合狠狠躁篇怎么玩| 国产精品专区一| 中文字幕日韩在线播放| 亚洲欧美一区二区三区在线| 97人人模人人爽人人喊中文字| 日韩免费观看高清| 国产中文欧美精品| 国产精品精品一区二区三区午夜版| 欧美极品少妇xxxxx| 精品国内亚洲在观看18黄| 国产成人涩涩涩视频在线观看| 国产日韩精品入口| 亚洲最大福利视频网站| 91在线观看欧美日韩| 成人www视频在线观看| 久久精品成人欧美大片| 日韩电影大片中文字幕| 亚洲人成电影网| 国产精品老女人精品视频| 一区二区欧美日韩视频| 尤物tv国产一区| 欧美精品videossex性护士| 欧美国产亚洲视频| 色小说视频一区| 91精品国产自产在线| 蜜臀久久99精品久久久无需会员| 欧美在线精品免播放器视频| 久久天天躁狠狠躁夜夜av| 国产欧美亚洲视频| 久久精品亚洲热| 久久久国产精品x99av| 18久久久久久| 亚洲激情国产精品| 成人h片在线播放免费网站| 国产成人精品在线播放| 欧美亚洲另类制服自拍| 精品国内产的精品视频在线观看| 亚洲欧美一区二区精品久久久| 精品久久久中文| 欧美日韩一区二区在线播放| 欧美丰满老妇厨房牲生活| 精品亚洲国产视频| 久久久久久美女| 国产精品高潮呻吟久久av黑人| 美女999久久久精品视频| 欧美性做爰毛片| 91久久嫩草影院一区二区| 在线看欧美日韩| 成人免费视频网址| 秋霞成人午夜鲁丝一区二区三区| 亚洲人成电影网| 日韩性xxxx爱| 日韩欧美在线一区| 久久中文字幕视频| 国产美女精彩久久| 97久久超碰福利国产精品…| 久久激情视频免费观看| 亚洲xxxx在线| 日韩欧美国产视频| 日韩av高清不卡| 欧美日韩国产第一页| 久久久影视精品| 国产精品美女www爽爽爽视频| 国产69精品久久久久99| 成人欧美一区二区三区在线| 日韩高清av在线| 欧美精品电影免费在线观看| 91福利视频网| 国产精品久久久久av| 亚洲国产精品美女| 国产拍精品一二三| 欧美日韩综合视频网址| 欧美另类极品videosbest最新版本| 国产精品亚洲欧美导航| 亚洲国产精品电影| 亚洲欧美在线一区二区| 精品国产区一区二区三区在线观看| 一区二区欧美日韩视频| 91九色视频导航| 亚洲区一区二区| 国产日韩欧美视频在线| 欧美美最猛性xxxxxx| 欧美与欧洲交xxxx免费观看| 国产精品自拍偷拍| 欧美老女人在线视频| 日本一区二区三区四区视频| 欧美另类极品videosbestfree| 国产精品久久久亚洲|