0

在我的应用程序中,它会打开一个启动画面,然后是 MainActivity。我写了以下代码

SplashActivity.java

    public class SplashActivity extends Activity {

    private final int SPLASH_DISPLAY_LENGHT = 2000;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);

        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                /* Create an Intent that will start the Menu-Activity. */
                Intent intent = new Intent(SplashActivity.this, MainActivity.class);
                startActivity(intent);
                finish();
            }
        }, SPLASH_DISPLAY_LENGHT);
    }
}

MainActiviy.java

这里

我添加了 MainActivity 和 SplashActivity 以显示如下:

    <activity
        android:name="com.emy.healthytips.SplashActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
     </activity>

    <activity
        android:name="com.emy.healthytips.MainActivity"
        android:label="@string/app_name"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:launchMode="singleTop">
        <meta-data
            android:name="android.app.default_searchable"
            android:value=".MainActivity" />

        <meta-data
            android:name="android.app.searchable"
            android:resource="@xml/searchable" />

        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>

         <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />

            <data
                android:host="com.emy.healthytips.MainActivity"
                android:scheme="oauth" />
        </intent-filter>
    </activity>

但它给了我以下异常

FATAL EXCEPTION: main
java.lang.NoClassDefFoundError: com.emy.healthytips.MainActivity
at com.emy.healthytips.SplashActivity$1.run(SplashActivity.java:20)

在这一行

Intent intent = new Intent(SplashActivity.this, MainActivity.class);

我怎样才能解决这个问题?希望任何人都可以帮助我。提前致谢。

4

1 回答 1

0

多件事...

1)你这样做的方式违背了启动画面的目的。当应用程序在后台加载时,启动屏幕应该为用户提供漂亮的图片。您所做的只是增加额外的 2 秒延迟。看看这篇文章:Android SplashScreen

2) 很多人说这个方法在<4.0上不起作用。不知道为什么,但只是提醒一下(https://stackoverflow.com/a/5486970/2066079

3)而不是:

startActivity(intent);
finish();

你应该使用:

SplashActivity.this.startActivity(intent);
SplashActivity.this.finish();

您想使用活动的版本startActivity()而不是Runnable's。这可能是不必要的,但如果它没有帮助,至少这是一个好习惯。

4)另外,就像我在评论中提到的那样,最好在 xml 中使用android:name=".MainActivity"而不是使用,android:name="com.emy.healthytips.MainActivity"以消除可能的未经检查的拼写错误。

于 2014-01-08T12:56:44.493 回答