提示:秋招在即,計蒙準備在國慶假期結束前整理一套Android初級面試題籍,希望對大家有所幫助
提示:以下是本篇文章正文內容
幀動畫、補間動畫、屬性動畫
可以將動畫組合在一起使用AnimatorSet,
AnimatorSet.play() 播放當前動畫的同時可以
.with() :將現有動畫和傳入的動畫同時執行
.after() :將現有動畫插入到傳入的動畫之後執行
.before() : 將現有動畫插入到傳入的動畫之前執行
寫一個類實現Interpolator介面,
Interpolator是一個空的介面繼承了TimeInterpolator介面,
定義getInterpolation方法即可
可以通過兩種方式,一是通過定義 Activity 的主題,二是通過覆寫 Activity 的overridePendingTransition 方法。
Handler能充當子執行緒和主執行緒之間的橋樑。
通常將 Handler 宣告在 Activity 中,然後覆寫 Handler 中的 handleMessage 方法,當子執行緒呼叫 handler.sendMessage()方法後 handleMessage 方法就會在主執行緒中執行。
這裡面除了 Handler、Message 外還有隱藏的 Looper 和 MessageQueue 物件。在主執行緒中 Android 預設已經呼叫了 Looper.preper()方法,呼叫該方法的目的是在 Looper 中
建立 MessageQueue 成員變數並把 Looper 物件繫結到當前執行緒中。當呼叫 Handler 的sendMessage(物件)方法的時候就將 Message 物件新增到了 Looper 建立的 MessageQueue佇列中,同時給 Message 指定了 target 物件,其實這個 target 物件就是 Handler 物件。主執行緒預設執行了 Looper.looper()方法,該方法從 Looper 的成員變數 MessageQueue 中取出 Message。
然後呼叫 Message 的 target 物件的 handleMessage()方法。這樣就完成了整個訊息機制。
這兩個方法都是在 View 的 dispatchTouchEvent 中呼叫的,onTouch 優先於 onTouchEvent執行。如果在 onTouch 方法中通過返回 true 將事件消費掉,onTouchEvent 將不會再執行。
另外需要注意的是,onTouch 能夠得到執行需要兩個前提條件,第一 mOnTouchListener 的值不能為空,第二當前點選的控制元件必須是 enable 的。因此如果你有一個控制元件是非 enable 的,那麼給它註冊 onTouch 事件將永遠得不到執行。對於這一類控制元件,如果我們想要監聽它的 touch 事件,就必須通過在該控制元件中重寫 onTouchEvent 方法來實現。
不能,如果在子執行緒中直接 new Handler()會丟擲異常
當我們在dao主執行緒中建立Handler物件的時制候沒有問題,是因為主執行緒會自動呼叫Looper.prepare()方法去給當前主執行緒建立並設定一個Looper物件,隨意在Handler建構函式中從當前執行緒的物件身上拿到這個Looper。
但是子執行緒中並不會自動呼叫這個方法,所以要想在子執行緒中建立Handler物件就必須在建立之前手動呼叫Looper.prepare()方法,否則就會報錯。
1、用 Activity 物件的 runOnUiThread 方法更新,在子執行緒中通過 runOnUiThread()方法更新 UI:
2、用 View.post(Runnable r)方法更新 UI
Android的UI存取是沒有加鎖的,多個執行緒可以同時存取更新操作同一個UI控制元件。也就是說存取UI的時候,android系統當中的控制元件都不是執行緒安全的,這將導致在多執行緒模式下,當多個執行緒共同存取更新操作同一個UI控制元件時容易發生不可控的錯誤,而這是致命的。所以Android中規定只能在UI執行緒中存取UI,這相當於從另一個角度給Android的UI存取加上鎖,一個偽鎖。
當全部整理完畢後將整理成pdf格式,以方便閱讀,檔案獲取如下圖(10月8日後)!