1. 程式人生 > >android(35)(service服務、生命週期、程序優先順序)

android(35)(service服務、生命週期、程序優先順序)

**1.**public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        new Thread(){
            public void run() {
                while(true){
                    System.out.println("獲取最新股票資訊。。。"
); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } } }; }.start(); } } **2.**public class MyService extends Service {
@Override public IBinder onBind(Intent intent) { return null; } //oncreate ondestory onstart onstop onresume onpause //服務沒有介面 @Override public void onCreate() { System.out.println("服務建立了"); super.onCreate(); } @Override public int onStartCommand
(Intent intent, int flags, int startId) { System.out.println("服務接收到了開啟指令"); return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { // TODO Auto-generated method stub System.out.println("服務銷燬了"); super.onDestroy(); } } **3.android系統下的廣播:** android系統下的廣播: 電池電量低。 電池充電完畢 簡訊到來了 程式安裝解除安裝 sd卡解除安裝 安裝 (1).寫一個類繼承廣播接受者 (2).在清單檔案配置關心的動作 (3).一旦廣播事件發生了,就會執行廣播接受者的onreceive方法 **4.任務棧和啟動模式:** 1.一個應用程式一般都是由多個activity組成的。 2.任務棧(task stack)(別名back stack後退棧) 記錄存放使用者開啟的activity的。 3.一個應用程式一被開啟系統就給他分配一個任務棧,當所有的activity都退出的時候,任務棧就清空了。 4.任務棧的id是一個integer的資料型別 自增長的。 5.在android作業系統裡面會存在多個任務棧,一個應用程式一個任務棧。 6.桌面應用和一般的應用程式是一樣的,任務棧的行為也是一樣。 7.預設情況下, 關閉掉一個應用程式,清空了這個應用程式的任務棧。應用程式的程序還會保留。 為什麼要引入任務棧的概念: windows下 可以通過點選工作列 切換任務 android下 長按小房子 切換任務 為了記錄使用者開啟了那些activity,記錄這些activity開啟的先後順序,google引入任務棧(task stack)概念,幫助維護好的使用者體驗。 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 **5.生命週期:** 完整生命週期 oncreate--》onstart--》onresume--》onpause--》onstop--》ondestory 可視生命週期 onstart--》onresume--》onpause--》onstop 前臺生命週期 onresume--》onpause 介面使用者仍然可見,但是失去焦點 使用場景: 1.應用程式退出自動儲存資料 ondestory oncreate 2.應用程式最小化 暫停的操作 onstop onstart 視訊播放器 3.遊戲的暫停和開始 前臺生命週期 **6.服務以及優先順序:** 服務: 長期後臺執行的沒有介面的元件 android應用:什麼地方需要用到服務? 天氣預報:後臺的連線伺服器的邏輯,每隔一段時間 獲取最新的天氣資訊 股票顯示:後臺的連線伺服器的邏輯,每隔一段時間 獲取最新的股票資訊 mp3播放器: 後臺長期的播放音樂。 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.提高程序的優先順序,系統不容易回收掉程序,即便回收了,記憶體充足的時候,把程序重新建立。