項目里某個activity在顯示前總是會先黑屏一會兒,然后才顯示頁面,感覺影響用戶體驗,要求優(yōu)化。好吧,從activity的生命周期方法開始吧。因為業(yè)務(wù)邏輯的關(guān)系,只用到onCreate和onResume(事實上,個人感覺,除了這倆生命周期方法以及相對應(yīng)的兩個方法,其他的生命周期方法例如onStart之類似乎都只在面試時候用到。。)。文檔里說明,onResume一旦執(zhí)行完畢,頁面就已經(jīng)顯示給用戶了,onCreate則是初始化各種(只要初始化一次的)數(shù)據(jù),比如布局(這個必須在onCreate里),一些邏輯需要的變量,對象等等。onCreate還沒有顯示給用戶,那么那段黑屏可以確定就是onCreate的時間太長了。? ? 怎么優(yōu)化?既然要減少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)?{
//根據(jù)參數(shù)在UI線程顯示view
//show?View?1...
//show?View?2...
//show?View?3...
//show?View?4...
}
}.execute(Params);
create?=?false;
}
}
}
加快activity顯示速度,提高用戶體驗
慕課網(wǎng)android學習小組
2014-12-17 16:42:12