setContentView 执行期间黑屏

2024-04-18

我有一个MainActivity。有时,当它加载时,我会观察到黑屏一秒钟。 我测量了操作的时间onCreate方法,发现花费了超过一秒的时间setContentView(R.layout.main_screen);我更喜欢显示上一个屏幕(在我的情况下是启动屏幕),而不是显示黑屏setContentView执行。我怎样才能摆脱这个黑屏?

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


  1. 使用静态变量来处理View cache.
  2. Use an AsyncTask不要冻结你的起源Activity
  3. Use LayoutInflater充气View布局并缓存它
  4. In the onCreate()目标Activity设置缓存

像这样的事情:

起源活动

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

setContentView 执行期间黑屏 的相关文章

随机推荐