【Android】基礎知識點備忘
2.在一個應用程式中,主執行緒通常用於接收使用者的輸入,以及將運算的結果反饋給使用者,所以說對於一些可能會產生阻塞的操作,必須放置在Worker Thread中。
3.隱藏Activity的標題欄:
在Activity的onCreate()方法中新增一行程式碼
super.onCreate(saveInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE); //就是這一行程式碼 setContentView(R.layout.firstlayout);
4.隱藏繼承自ActionBarActivity的標題欄:
在Activity的的onCreate()方法中新增一行程式碼
super.onCreate(savedInstanceState);
this.getSupportActionBar().hide(); //就是這一行程式碼
setContentView(R.layout.activity_main);
隱藏頂部狀態列,進入全屏顯示狀態:
//設定activity全屏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); //設定顯示的XML,需要注意的是去掉狀態列和全屏的操作要放在setContentView之前,不然會報錯。
5.ProgressBar和ProgressDialog的setCancelable方法注意事項:
注意如果在 setCancelable()中傳入了 false, 表示 ProgressDialog 是不能通過 Back 鍵取消
掉的,這時你就一定要在程式碼中做好控制,當資料載入完成後必須要呼叫 ProgressDialog 的
dismiss()方法來關閉對話方塊,否則 ProgressDialog 將會一直存在。
6.android:gravity 是用於指定文字在控制元件中的對齊方式,而 android:layout_gravity 是用於指定控制元件在佈局中的對齊方式。
7.Activity只有在3.0以上才會預設顯示ActionBar,在3.0以下對ActionBar進行一些設定會報告空指標異常,如:(requestWindowFeature(Window.FEATURE_NO_TITLE);ActionBarActivity是v7包中的元件,在全平臺都可以使用,只要注意方法的使用,不會出現類似空指標的錯誤,同時這個元件還能實現在5.0以下使用5.0中的TitleBar等元件,這應該也是google官方將ActionBarActivity作為預設父類的原因之一。
8.startActivityForResult()方法也是用於啟動Activity的, 但這個方法期望在Activity銷燬的時候能夠返回一個結果給上一個活動。毫無疑問,這就是我們的.startActivityForResult()方法接收兩個引數,第一個引數還是 Intent,第二個引數是請求碼,用於在之後的回撥中判斷資料的來源。
9.動態新增Fragment主要分為5步:
- 建立待新增的Fragment例項
- 獲取到FragmentManager,在Activity中可以直接呼叫getFragmentManager方法
- 開啟一個事務,通過方法beginTransaction來開啟
- 向容器內加入Fragment,一般使用replace方法實現,需要出入容器的ID和待新增的Fragment例項
- 提交事務,通過呼叫commit方法來實現
10.
FragmentTransaction 中提供了一個 addToBackStack()方法,可以用於將一個事務新增到返回棧中。
11.Activity和Fragment之間的互動:
- Activity呼叫Fragment的方法:
- Fragment呼叫Activity的方法:
有了Activity例項之後, 在Fragment中呼叫Activity裡的方法就變得輕而易舉了。 另外當Fragment中需要使用 Context 物件時, 也可以使用 getActivity()方法, 因為獲取到的Activity本身就是一個 Context物件了。
- Fragment之間的通訊:
12. 使用本地廣播的幾點優勢:
- 可以明確地知道正在傳送的廣播不會離開我們的程式, 因此不需要擔心機密資料洩漏的問題。
- 其他的程式無法將廣播發送到我們程式的內部, 因此不需要擔心會有安全漏洞的隱患。
- 傳送本地廣播比起傳送系統全域性廣播將會更加高效。
13.為了確保你的應用程式是安全的,總是使用顯式intent當開啟一個服務並且不要為它宣告intent filter。使用隱式intent來開啟一個服務是不不安全的,因為你不能確定到底是哪一個service響應了這個intent使用者也看不見哪一個service被啟動了。從Android5.0開始,當你用隱式的intent呼叫bindService()的時候,系統會丟擲異常。
14.View類預設的onMeasure()方法只支援EXACTLY模式,如果你繼承View定義一個控制元件,它是不支援wrap_content屬性的,所以就要重寫onMeasure()方法來指定wrap_content的大小.
15.對於view而言,它的MeasureSpec由父容器的MesaureSpec和自身的LayoutParams共同決定.
16.當View採用固定的寬/高的時候,不管父容器的MeasureSpec是什麼,View的MeasureSpec都是EXACTLY模式,並且大小遵循LayoutParams的大小.
17.當View的寬/高是match_parent的時候,如果父容器的模式是EXACTLY,那麼View也是EXACTLY模式,並且大小是父容器的剩餘空間;如果父容器是AT_MOST模式的時候,那麼View也是AT_MOST模式,並且大小不會超過父容器的剩餘空間;
18.當View的寬/高是wrap_content的時候,不管父容器的模式是EXACTLY還是AT_MOST,View的模式總是AT_MOST,並且大小不能超過父容器的剩餘空間.
19.在自定義ViewGroup的時候,通常會去重寫onLayout()方法來控制其子View顯示的邏輯.同樣,如果需要支援wrap_content屬性,那麼它還必須重寫onMeasure()方法,這點與View是相同的.
20.ViewGroup如果沒有指定背景顏色的時候,不會呼叫onDraw()方法,而是呼叫dispatchDraw()方法,來遍歷所有的子View,並呼叫子View的繪製方法.
21.資料庫的操作很重,一次讀寫操作花費 10~20ms 是很常見的,這樣的耗時很容易造成介面的卡頓。所以通常情況下,如果可以的話一定要避免在主執行緒中處理資料庫。