【问题标题】:White screen before splashscreen闪屏前的白屏
【发布时间】:2013-02-10 15:14:04
【问题描述】:

我的SplashScreenActivity 有问题,当我在手机上启动我的应用程序时,它会显示大约 0.5 秒的白屏。 MainActitivy 扩展 FragmentActivity 并在 AndroidManifest 中声明 SplashScreenActivity 为启动器,纵向模式为 screenOrientation

代码:

public class SplashScreenActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.splashscreen);
    randomSplash();

    Thread splashscreen = new Thread() {

        public void run() {
            try {
                Thread.sleep(1000);
                Intent mainScreen = new Intent("com.rm.jkrm.MAINACTIVITY");
                startActivity(mainScreen);
            } catch (InterruptedException e) {

            } finally {
                finish();
            }
        }
    };
    splashscreen.start();
}

private void randomSplash(){
    Random random = new Random();
    int i = random.nextInt(4);

    LinearLayout ln = (LinearLayout) findViewById(R.id.splashscreen);

    switch(i){
    case 1: 
        ln.setBackgroundResource(R.drawable.splash1);
        break;
    case 2: 
        ln.setBackgroundResource(R.drawable.splash2);
        break;
    case 3: 
        ln.setBackgroundResource(R.drawable.splash3);
        break;
    default: 
        ln.setBackgroundResource(R.drawable.splash0);
        break;
    }
}
}

XML:

 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/splashscreen"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical">
</LinearLayout>

【问题讨论】:

  • 您是否在 MAINACTIVITY 的主线程上执行繁重的任务?
  • 可能您的R.drawable.splashXXX 资源非常大,需要很长时间才能加载它们
  • 我同意@vmironov
  • 我把图片 (350kB) 改成 50kB 的图片,现在白屏只出现了大约四分之一秒。

标签: android performance


【解决方案1】:
 Thread splashscreen = new Thread() {

        public void run() {
            try {
                Thread.sleep(1000);
                Intent mainScreen = new Intent("com.rm.jkrm.MAINACTIVITY");
                startActivity(mainScreen);
            } catch (InterruptedException e) {

            } finally {
                finish();
            }
        }
    };
    splashscreen.start();

这是你的问题 UI 线程休眠不是一个好主意,而是使用处理程序 我认为它也可能导致异常。

Handler h=new Handler();
        h.postDelayed(new Runnable() {

            public void run() {
                // TODO Auto-generated method stub
                startActivity(new Intent(Splash_Activity.this,Main_Activity.class));
                finish();
            }
        }, 2000);
    }

【讨论】:

  • 仍然出现同样的问题,但是 ty.
【解决方案2】:

您需要在 AsyncTask 中运行这两个操作:

setContentView(R.layout.splashscreen);
randomSplash();

setContentView 放入doInBackground 方法和运行randomSplash 的postExecute 方法中。

【讨论】:

    【解决方案3】:

    将AndroidManifest.xml文件中的SplashActivity主题改成这个。

    android:theme="@android:style/Theme.Translucent.NoTitleBar"
    

    【讨论】:

    • 它与标题栏无关。它是关于闪屏前的白色飞溅。
    猜你喜欢
    • 2021-12-23
    • 2021-11-08
    • 2021-03-17
    • 2012-04-18
    • 1970-01-01
    • 2021-03-18
    • 2016-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多