1. 程式人生 > >【Android】基礎知識點備忘

【Android】基礎知識點備忘

1.原則上Worker執行緒不允許修改UI執行緒(即主執行緒)的內容或控制元件的,但是某些特殊的控制元件允許被修改,如ProgressBar。 

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之間進行通訊, FragmentManager 提供了一個類似於 findViewById() 的方法,專門用於從佈局檔案中獲取Fragment的例項,程式碼如下所示: RightFragment rightFragment = (RightFragment) getFragmentManager().findFragmentById(R.id.right_fragment);呼叫 FragmentManager 的 findFragmentById()方法, 可以在Activity中得到相應Fragment的例項,然後就能輕鬆地呼叫Fragment裡的方法了。


  • Fragment呼叫Activity的方法:
掌握瞭如何在Activity中呼叫Fragment裡的方法, 那在Fragment中又該怎樣呼叫Activity裡的方法呢?其實這就更簡單了,在每個Fragment中都可以通過呼叫 getActivity()方法來得到和當前Fragment相關聯的Activity例項,程式碼如下所示:MainActivity activity = (MainActivity) getActivity();
有了Activity例項之後, 在Fragment中呼叫Activity裡的方法就變得輕而易舉了。 另外當Fragment中需要使用 Context 物件時, 也可以使用 getActivity()方法, 因為獲取到的Activity本身就是一個 Context物件了。

  • Fragment之間的通訊:
首先在一個Fragment中可以得到與它相關聯的Activity, 然後再通過這個Activity去獲取另外一個Fragment的例項, 這樣也就實現了不同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 是很常見的,這樣的耗時很容易造成介面的卡頓。所以通常情況下,如果可以的話一定要避免在主執行緒中處理資料庫。