我的启动画面打开然后应用程序崩溃

时间:2017-07-21 14:01:48

标签: java android splash-screen

我为我的应用程序的第一个版本编写了相同的代码,它工作正常。后来,我改为侧边栏抽屉应用程序模板,它不起作用。可能有什么不对?提前致谢。 这是SpashScreen.java文件的代码:

public class SplashScreen extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splash_screen);
    Thread myThread = new Thread(){
        @Override
        public void run(){
            try {
                sleep(3000);
                Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                startActivity(intent);
                finish();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    };
    myThread.start();
}

}

这是清单:

<?xml version="1.0" encoding="utf-8"?>

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/example"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity
        android:name=".SplashScreen"
        android:label="@string/example"
        android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".MainActivity"></activity>
</application>

5 个答案:

答案 0 :(得分:1)

试试这个

new Handler().postDelayed(new Runnable() {

        /*
         * Showing splash screen with a timer. This will be useful when you
         * want to show case your app logo / company
         */

        @Override
        public void run() {
            // This method will be executed once the timer is over
            // Start your app main activity
            Intent i = new Intent(SplashScreen.this, MainActivity.class);
            startActivity(i);

            // close this activity
            finish();
        }
    }, 3000);// time in milliseconds

答案 1 :(得分:0)

尝试这可能有帮助

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            Intent intent = new Intent(SplashActivity.this, MainActivity.class);
            startActivity(intent);
            finish();
        }
    }, 3000);

答案 2 :(得分:0)

尝试使用:

new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            Intent intent = new Intent(SplashScreen.this, MainActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);
        }
    }, 3000);

此代码不会创建新的线程, 附: Android无法从另一个线程(仅表单UI)启动活动

答案 3 :(得分:0)

startActivity()需要在main thread中运行。使用postDelay()Hanlder

    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            Intent i = new Intent(SplashScreen.this, MainActivity.class);
            startActivity(i);
            finish();
        }
    }, 3000);

答案 4 :(得分:0)

使用处理程序可以解决这个问题,下面的代码会对你有用

  handler.postDelayed(
            new Runnable() {
                public void run() {
                    Intent intent = new Intent(youractivity.this, MainActivity.class);
            startActivity(intent);
                }
            }, 3000);