有时我们启动APP时会发现启动时间会有延迟,而且启动后还会出现黑屏或者白屏现象,这个对用户的体验是很不好的。下面带领大家如何解决此类问题。
首先,我们必须明白为什么会出现此类问题?代码如下
“`
public class MainActivity extends AppCompatActivity{
@Override
public void onCreate(Bundle saveInstanceState){
super.onCreate(saveInstanceState);
setContentView(R.layout.activity_main);
}
}
“`
从上诉代码中我们可知启动Activity时需要加载布局,也就是 setContentView(R.layout.activity_main)这句代码,当布局没有加载完成时,会显示黑屏或者白屏(可能与你设置的主题有关)。当我们知道问题关键在哪儿时我们就可以想办法去解决它了。
那么我们如何解决这个问题呢?既然它是由setContentView引起的,那么我们是不是可以设置一个引导界面,并且这个引导界面不去加载布局,通过设置主题来的方法来显示引导界面内容。方法如下:
1.新建一个Activit为SplashActivity,在drawable文件夹中新建文件splash_background.xml文件,代码如下:
<layer-list
xmlns:android=”http://schemas.android.com/apk/res/android”>
<item android:drawable=”@color/gray”/>
<item>
<bitmap
android:gravity=”fill_vertical”
android:src=”@mipmap/beautifulgril_01”>
</bitmap>
</item>
</layer-list>2.在styles文件中添加新主题,并设置主题背景,代码如下:
<resources>
……
<style name=”SplashTheme”
parent=”Theme.AppCompat.NoActionBar”>
<item name=”android:windowBackground”>
@drawable/splash_background</item>
<item name=”android:windowFullscreen”>true</item>
</style>3.在AndroidManifast.xml文件中配置SplashActivity的信息,代码如下:
<activity
android:name=”.SplashActivity”
android:theme=”@style/SplashTheme”>
<intent-filter>
<action android:name=”android.intent.action.MAIN” />
<category android:name=”android.intent.category.LAUNCHER” />
</intent-filter>
</activity>4.最后再设置Intent跳转页面即可,代码如下:
public class SplashActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(2000);
Intent intent = new Intent(SplashActivity.this,MainActivity.class);
startActivity(intent);
finish();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
}
这样我们的代码就全部完成了。