Android(java)學習筆記169:Activity中的onCreate()方法分析

來源:互聯網
上載者:User

標籤:

1.onCreate( )方法是android應用程式中最常見的方法之一:

     翻譯過來就是說,onCreate()函數是在activity初始化的時候調用的,通常情況下,我們需要在onCreate()中調用setContentView(int)函數填充螢幕的UI,一般通過findViewById(int)返回xml中定義的視圖或組件的ID。子類在重寫onCreate()方法的時候必須調用父類的onCreate()方法,即super.onCreate(),否則會拋出異常。

       但是,我們必須要注意的是,在onCreate()函數裡我們需要配置一些必要的資訊,但是並不是所有的事情都能在這裡做。我們知道,一個activity啟動調用的第一個函數就是onCreate,它主要做這個activity啟動時一些必要的初始化工作,這個函數調用完後,這個activity並不是說就已經啟動了,或者是跳到前台了。而是還需要其他的大量工作,我們知道:onCreate之後還有onRestart()和onStart()等,實際上onStart()調用完畢了這個activity還沒有完全啟動,也只是前台可見,直到 onResume() 調用後這個onCreate才算終於啟動。既然這樣,那麼在一個activity真正啟動之前任何相當耗時的動作都會導致activity啟動緩慢,特別是在onCreate裡面耗時間長度的話可能導致極差的使用者體驗。

2.程式碼範例:

protected void onCreate(Bundle savedInstanceState) {    // TODO Auto-generated method stub              super.onCreate(savedInstanceState);         this.requestWindowFeature(Window.FEATURE_NO_TITLE);         mContext = this;         setContentView(R.layout.main);         dataLoad = new DataLoading();         mScrollLayout = (ScrollLayout)findViewById(R.id.ScrollLayoutTest);         btnExit = (ImageButton)findViewById(R.id.btn_exit);         btnExit.setOnClickListener(btnExitClickListener);         btnContacts = (ImageButton)findViewById(R.id.btn_contacts);         btnContacts.setOnClickListener(btnContactsClickListener);              mSpeedDailDataMgr = new SpeedDailMgr(this);         loadGripView();          //in MTK                 //mCallOptionHandler = new CallOptionHandler(this);         mCallOptionHandler = new ContactsCallOptionHandler(this,                new ContactsCallOptionHandlerFactory());                 //don‘t consider getting no data, ex: when starting up         updateEnabledCard();  }

         這是一個APP的一個Activity的onCreate的寫法。其實這段代碼沒有什麼問題,而且看起來也是比較簡單的代碼。不過裡面大量危險的程式碼片段:不管是dataLoad = new DataLoading(); 還是 mSpeedDailDataMgr = new SpeedDailMgr(this);更或者是loadGripView();甚至updateEnabledCard();這麼危險的處理都是不應該在這裡來處理的。這裡包含了載入資料庫資料、讀取檔案資訊、讀取SIM卡資訊,這些操作都是有可能拋出異常的,而且其操作耗時也是不確定的!對於面對這樣問題,我覺得應該注意下面幾個方面:

(1)在Activity啟動前,盡量少做。

(2)對於布局比較複雜的時候,可以考慮不要一次性全部載入上,動態載入是一個好的辦法。

(3)對於及時需要的資料,載入起來耗時的又有異常危險的,一定記得開闢一個線程來做這些動作,千萬記得不要做阻塞主線程(UI線程)的任何事情。

(4)對於特殊情況下,Activity啟動確實需要大量工作時候,可以考慮先載入一個簡單的布局(或是Activity)來過渡。

(5)所有的目的都是讓你要啟動的組件儘快上場,而不是以畫好妝為主,這樣的話客人會等不及的,顧客就是上帝。

 

Android(java)學習筆記169:Activity中的onCreate()方法分析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.