Android基礎第八天易忘部分(Activity)

我叫阿狸貓發表於2014-12-04

1.在Activity標籤中新增android:theme="@android:style/Theme.Dialog"會讓這個Activity以Dialog形式來顯示

2.在Activity標籤中新增android:theme="@android:style/Theme.Translucent"會讓這個Activity以透明的形式來顯示,上一個Activity會執行生命週期裡的onPause方法。

3.在清單檔案中Activity裡配置android:screenOrientation="landscape"表示橫屏顯示

4.避免橫豎屏切換導致Activity的生命週期方法執行需要在Activity標籤裡新增

android:configChanges="orientation|keyboardHidden|screenSize"

screenSize在2.3這種低版本的時候可以不加,但是4.0以上就必須要加,否則橫豎屏切換還會導致生命週期的方法執行

5.任務棧是記錄使用者開啟的Activity的。

6.一個應用程式被開啟後系統就會分配一個任務棧,當所有的Activity都退出的時候,任務棧就清空了。

7.任務棧的id是一個Integer的資料型別,並且是自增的。例如我開啟相機應用,相機應用的任務棧id是1,這時再開啟簡訊應用,簡訊應用的任務棧id就是2。

    任務棧ID用getTaskId()獲得。

8.在Android作業系統裡面會存在多個任務棧,一個應用程式一個任務棧。

9.Activity的啟動模式

1. standard   預設標準的啟動模式, 每次startActivity都是建立一個新的activity的例項。
              適用於絕大大數情況
2. singleTop  單一頂部,如果要開啟的activity在任務棧的頂部已經存在,就不會建立新的例項,
              而是呼叫 onNewIntent() 方法。
              應用場景: 瀏覽器書籤。 避免棧頂的activity被重複的建立,解決使用者體驗問題。
3. singletask 單一任務棧 , activity只會在任務棧裡面存在一個例項。如果要啟用的activity,在
              任務棧裡面已經存在,就不會建立新的activity,而是複用這個已經存在的activity,
              呼叫 onNewIntent() 方法,並且清空當前activity任務棧上面所有的activity
              應用場景:瀏覽器activity, 整個任務棧只有一個例項,節約記憶體和cpu的目的
              注意: activity還是執行在當前應用程式的任務棧裡面的。不會建立新的任務棧。
4. singleInstance  單態 單例模式
              單一例項,整個手機作業系統裡面只有一個例項存在。不同的應用去開啟這個activity
     共享 公用的同一個activity。
              他會執行在自己單獨,獨立的任務棧裡面,並且任務棧裡面只有他一個例項存在。
              應用場景:呼叫來電介面 InCallScreen

10.Activity的返回方法覆寫

/**
* 按返回鍵執行該方法
* 如果不希望後退鍵生效,就把super.onBackPressed();去掉
*/
@Override
public void onBackPressed() {
	super.onBackPressed();
}



11.BroadcastReceiver:

             (1)如果多個廣播接收者的優先順序是一樣的,那麼在清單檔案中先註冊的先執行,不同應用程式的先安裝的先執行

             (2)sendBroadcast是發無需廣播,不可攔截

             (3)sendOrderedBroadcast是發有序廣播,可攔截,sendOrderedBroadcast的引數三可指定最終的廣播接收者

             (4)getResultData和setResultData   獲取和設定廣播資料對無序廣播是無效的,如果需要傳遞資料,只能使用intent的putExtra等api進行資料儲存


12.Service:長期後臺執行的沒有介面的元件

new Thread(){}.start(); 子執行緒沒有介面,也是長期後臺執行的。但是他很有可能因為手機記憶體不足而終止執行。


android系統程式管理是按照一定的規則的:
1.應用程式一旦被開啟 通常情況下關閉(只是清空任務棧)後程式不會停止。方便下一次快速啟動。這樣會帶來記憶體不足的問題。
2.Android系統有一套 記憶體清理機制。 按照優先順序去回收系統的記憶體。


程式分為5個等級的優先順序:(從高到低)

1.Foreground process 前臺程式  使用者正在玩的應用程式對應的程式

2.Visible process 可視程式 使用者仍然可以看到這個程式的介面。

3.Service process 服務程式  應用程式有一個服務元件在後臺執行。

4.Background process 後臺程式  應用程式沒有服務在執行 並且最小化 (activity onstop)

5.Empty process 空程式 沒有任何執行的activity, 任務棧空了


長期後臺執行的元件, 不要在activity開啟子執行緒。
應該是建立服務,在服務裡面開啟子執行緒。


服務的目的:
1.長期後臺執行。
2.提高程式的優先順序,系統不容易回收掉程式,即便回收了,記憶體充足的時候,把程式重新建立。




相關文章