gpt4 book ai didi

android - setContentView 执行期间黑屏

转载 作者:行者123 更新时间:2023-11-29 00:48:01 26 4
gpt4 key购买 nike

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

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

最佳答案

  1. 使用静态变量来处理View 缓存。
  2. 使用 AsyncTask 不卡住您的原始 Activity
  3. 使用 LayoutInflater 膨胀 View 布局并缓存它
  4. 在目标Activity的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();

...

目标 Activity

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 以避免过渡时出现卡住感。

关于android - setContentView 执行期间黑屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5219447/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com