加快activity顯示速度,提高用戶體驗

項目裏某個activity在顯示前總是會先黑屏一會兒,然後才顯示頁面,感覺影響用戶體驗,要求優化。好吧,從activity的生命週期方法開始吧。因爲業務邏輯的關係,只用到onCreate和onResume(事實上,個人感覺,除了這倆生命週期方法以及相對應的兩個方法,其他的生命週期方法例如onStart之類似乎都只在面試時候用到。。)。文檔裏說明,onResume一旦執行完畢,頁面就已經顯示給用戶了,onCreate則是初始化各種(只要初始化一次的)數據,比如佈局(這個必須在onCreate裏),一些邏輯需要的變量,對象等等。onCreate還沒有顯示給用戶,那麼那段黑屏可以確定就是onCreate的時間太長了。

    怎麼優化?既然要減少onCreate的時間,那就精簡onCreate裏的代碼。放在onResume裏好了。爲了用戶體驗更好一些,把頁面顯示的View細分一下,放在AsyncTask裏逐步顯示,如果你夠熟練,用handler更好,這樣用戶的看到的就是有層次有步驟的一個個的view的展示,不會是先看到一個黑屏,然後一下顯示所有view。最好作成動畫,效果更自然些。利用多線程的目的就是儘可能的減少onCreate和onReume的時間,使得用戶能儘快看到頁面,操作頁面。

    但是,很多操作是只需要一次初始化的,都放在onResume裏每次進入activity都會浪費初始化時間。這個好解決,做一個boolean變量,在onCreate裏標記爲true。在onResume裏判斷爲true就進行初始化,初始化完成立刻置爲false。搞定。

代碼框架:

package com.example.example;

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {

	private boolean create;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		create = true;   //標記變量
	}

	@Override
	protected void onResume(){
		super.onResume();
		if(create){
			new AsyncTask<Params, Progress, Result>
			new AsyncTask<Params, Progress, Result>(){
				@Override
				protected Boolean doInBackground(Void... params) {
					//後臺逐步初始化view。
					//init View 1...
					publishProgress(values);
					//init View 2...
					publishProgress(values);
					//init View 3...
					publishProgress(values);
					//init View 4...
					publishProgress(values);
					return null;
				}

				@Override
				protected void onProgressUpdate(Progress... values) {
					//根據參數在UI線程顯示view
					//show View 1...
					//show View 2...
					//show View 3...
					//show View 4...
				}

			}.execute(Params);
			create = false;
		}
	}
}


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