【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 是很常見的,這樣的耗時很容易造成界面的卡頓。所以通常情況下,如果可以的話一定要避免在主線程中處理數據庫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章