setContentView执行期间出现黑屏

时间:2011-03-07 12:00:31

标签: android layout android-activity

我有MainActivity。有时当它加载时我会观察黑屏一秒钟。 我用onCreate方法测量了操作的时间,发现setContentView(R.layout.main_screen);花费了一秒多的时间 在setContentView执行期间,我更喜欢显示前一个屏幕(在我的情况下为Splash屏幕)而不是此黑屏。 如何摆脱这个黑屏?

看似android以某种方式预加载布局,有时会出现这样的问题。但如果我终止我的进程并启动应用程序,我总会看到这个黑屏。

1 个答案:

答案 0 :(得分:2)

  1. 使用静态变量来处理View缓存。
  2. 使用AsyncTask不冻结您的来源Activity
  3. 使用LayoutInflater来扩充View布局并将其缓存
  4. 在目标活动的onCreate()中设置缓存
  5. 这样的事情:

    原始活动

    ...
                    //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以避免过渡时出现冻结感。