2011-03-07 40 views
2

我有一個MainActivity。有時當它加載時,我觀察到黑屏一秒鐘。 我測量了onCreate方法的運行時間,發現花費了一秒多的時間setContentView(R.layout.main_screen); 在執行setContentView期間,我更喜歡顯示前一個屏幕(在我的情況下是啓動屏幕)而不是此黑屏。 我怎樣才能擺脫這個黑屏?setContentView執行期間的黑色屏幕

似乎android會以某種方式預加載佈局,並且有時會出現此類問題。但是如果我殺了我的程序並啓動應用程序,我總會看到這個黑屏。

回答

2
  1. 使用靜態變量來處理View緩存。
  2. 使用AsyncTask以不凍結你的出身Activity
  3. 使用LayoutInflater膨脹的View佈局,並將它緩存
  4. 在目標活動的onCreate()設置緩存

事情是這樣的:

原產活動

... 
       //noinspection unchecked 
       new AsyncTask<Void, Void, Void>() { 
        @Override 
        protected Void doInBackground(Void... params) { 
         LayoutInflater inflater = (LayoutInflater) 
           MainParentActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

         // VERY VERY SLOW action if your Activity is heavy 
         DialerActivity.cachedView = inflater.inflate(R.layout.dialer_portrait, null, false); 
         return null; 
        } 

        @Override 
        protected void onPostExecute(Void aVoid) { 
         Intent intent = new Intent(MainParentActivity.this, DialerActivity.class); 
         intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); 
         startActivity(intent); 
        } 
       }.execute(); 

... 

目標活動

public class DialerActivity extends MainParentActivity { 
    static View cachedView = null; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     if (cachedView != null) { 
      setContentView(cachedView); 
     } else { 
      setContentView(R.layout.dialer_portrait); 
     } 
    } 
. . . 

你也可以使用一個ProgressDialog而膨脹,以避免在過渡凍結的感覺。