首页 > 解决方案 > 启动活动后登录活动崩溃

问题描述

我正在开发一个 android 项目,其中有 Login、Register、Main Activity 和 Splash Activity。因此,除了 Splash Activity 之外,所有活动都会崩溃。首先执行 Splash Activity,然后 Main Activity 崩溃。

这是飞溅活动:

public class SplashActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);
        Thread thread = new Thread()
        {
            @Override
            public void run() {
                try
                {
                    sleep(5000);
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
                finally
                {
                    Intent mainintent = new Intent(SplashActivity.this, LoginActivity.class);
                    startActivity(mainintent);
                }
            }
        };
        thread.start();
    }

    @Override
    protected void onPause() {
        super.onPause();
        finish();
    }

}

这是 Manifest.xml 文件

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

    <activity android:name="com.example.connect2every1.MainActivity">

    </activity>

    <activity android:name="com.example.connect2every1.SplashActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

Login Activity,Register Activity,Main Activity,必须要执行,主要动机是在Splash Activity 之后,必须执行Login Activity。

标签: androidandroid-developer-api

解决方案


您不能从工作线程更改 UI,只有主线程可以更改 UI,因此runOnUiThread在启动活动时使用。

Thread splash=new Thread(){
    public void run() {
        synchronized (this) {
            try {
                wait(2000);
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        startActivity(new Intent(getApplicationContext(),LoginActivity.class));
                        finish();
                    }
                });
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
};
splash.start();

推荐阅读