飞溅屏幕卡在屏幕上 - 意图主要活动没有启动

时间:2014-09-14 04:32:22

标签: java android multithreading android-intent splash-screen

我使用Thread.sleep()在Android中创建了一个启动画面。 (我知道另一种方法 - 使用handler,但我现在必须使用此方法。)

我的代码如下:

public class SplashScreen extends Activity { 
   Thread t;
             @Override
                protected void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.activity_spash_screen);

            new myclass();
        }
            class myclass implements Runnable{

                myclass()
                {
                t = new Thread();
                t.start();
                }

                public void run()
                {
                    try{
                        Thread.sleep(1000);
                    Intent i = new Intent(getApplicationContext(), MainActivity.class);
                       startActivity(i);
                       finish();
                    }
                    catch(InterruptedException e){
                    System.out.println("thread interrupted");

                    }
                    }

                }
            }

它没有显示任何错误,但是闪屏粘在屏幕上。

1秒后,它没有启动另一个intent

如果你知道错误,请帮助我。

2 个答案:

答案 0 :(得分:1)

不会调用

run runnable方法,因为您没有将runnable传递给Thread构造函数。所以把它传递给:

            t = new Thread(this);

答案 1 :(得分:0)

试试这个,我总是在我的Splash Activities中使用这个代码。

 public class SplashScreen extends Activity
   {
private Thread mSplashThread;

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.splash_screen);

    mSplashThread = new Thread()
    {
        @Override
        public void run()
        {
            try
            {
                synchronized (this)
                {
                    wait(2000);
                }
            }
            catch(InterruptedException ex) {
                ex.printStackTrace();
            }
            finish();
            startActivity(new Intent(getApplicationContext(),MainActivity.class));
        }
    };
    mSplashThread.start();
}

@Override
public boolean onTouchEvent(MotionEvent evt)
{
    if (evt.getAction() == MotionEvent.ACTION_DOWN)
    {
        synchronized (mSplashThread)
        {
            mSplashThread.notifyAll();
        }
    }
    return true;
}
    }