如何在加载活动时显示启动画面

6
我有一个包含许多UI视图的活动。在它的onCreate方法中,我发现单独一行的setContentView需要8-12秒才能完成。因此,在加载时我想显示我的标志图片。我尝试了很多事情但都没有成功。我怀疑主要原因是在完成setContentView之前,什么也不能显示。
任何帮助将不胜感激。
更新:我认为很多人不知道在完成setContentView之前无法显示任何对话框。因此,使用另一个闪屏活动对我没有任何帮助。
更新2:
我忘记在找到问题原因后更新这个问题。请参考以下问题:setContentView taking long time (10-15 seconds) to execute

我建议您采用我的方法:链接 这对我来说很有效。 - Zappescu
3个回答

7

使用 AsyncTask

onPreExecute() 中设置启动画面。

doInBackground() 中执行你的任务。

onPostExecute() 中关闭启动画面。


0
以下是使用CountDownTimer类创建启动屏幕的简单代码:
public class SplashDialogActivity extends Activity {
@Override
    protected void onCreate(Bundle savedInstanceState) {
        // Be sure to call the super class.
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.layout);
      counter.start();
    }
    MyCount counter = new MyCount(5000, 1000);
 public class MyCount extends CountDownTimer{
            public MyCount(long millisInFuture, long countDownInterval) {
            super(millisInFuture, countDownInterval);
            }

            @Override
            public void onFinish() {
                go_back();
            }

            @Override
            public void onTick(long millisUntilFinished) {



              }
     }

 public void go_back()
        {
          counter.cancel();

                    Intent i=new Intent(this,account.class);
                    i.putExtra("first_time", true);
                    startActivity(i);

            this.finish();
        }
}

先生,您可以减少时间 MyCount counter = new MyCount(2000, 1000); 这里的2000表示2秒钟..这就是如何控制闪屏显示的时间。 - Maneesh
尝试在一个活动中使用setContentView两次来显示两个屏幕(启动和主屏幕),并在它们之间使用线程或计时器。 - Maneesh
还有一件事,如果setContentView需要时间,请尝试在运行时而不是设计时加载数据或图像文件。 - Maneesh

0

尝试使用此代码创建闪屏页面

private Thread mSplashThread;    

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.splesh);

    final Splash sPlashScreen = this;   

     mSplashThread =  new Thread(){
        @Override
        public void run(){
            try {
                synchronized(this){
                    wait(5000);
                }
            }
            catch(InterruptedException ex){                    
            }

            finish();

            Intent intent = new Intent();
            intent.setClass(sPlashScreen,Login.class);
            startActivity(intent);
            stop();                    
        }
    };

    mSplashThread.start();        
 }

// Processes splash screen touch events
@Override
public boolean onTouchEvent(MotionEvent evt) {

     if(evt.getAction() == MotionEvent.ACTION_DOWN)
     {
         synchronized(mSplashThread){
             mSplashThread.notifyAll();
         }
     }
     return true;
}    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接