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