我有一个MainActivity
。有时,当它加载时,我会观察到黑屏一秒钟。
我测量了操作的时间onCreate
方法,发现花费了超过一秒的时间setContentView(R.layout.main_screen);
我更喜欢显示上一个屏幕(在我的情况下是启动屏幕),而不是显示黑屏setContentView
执行。我怎样才能摆脱这个黑屏?
似乎 android 以某种方式预加载布局,有时会出现此类问题。但是,如果我终止进程并启动应用程序,我总是会看到黑屏。
- 使用静态变量来处理
View
cache.
- Use an
AsyncTask
不要冻结你的起源Activity
- Use
LayoutInflater
充气View
布局并缓存它
- 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(使用前将#替换为@)