飞溅活动后登录活动崩溃

时间:2019-02-10 10:57:54

标签: android android-developer-api

我正在开发一个Android项目,其中有登录,注册,主要活动以及启动活动。 因此,除了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>

必须执行登录活动,注册活动,主要活动 主要动机是 启动活动后必须执行登录活动。

4 个答案:

答案 0 :(得分:0)

最好使用以下代码

 new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {

           Intent mainintent = new Intent(SplashActivity.this, LoginActivity.class);
            startActivity(mainintent);finish()


        }
    }, 2000);

之后,从onResume()中删除finish()

答案 1 :(得分:0)

您不能从工作线程更改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();

答案 2 :(得分:0)

AndroidManifest.xml 中注册了每个活动吗?

如果这样做,如果没有Handler ,将无法从非UI线程切换UI。

因此,为了使您的代码正常工作,您需要在UI线程中初始化Handler并发布一个Runnable实例,无论UI或非UI线程是否有延迟。

代码在这里

public class SplashActivity extends AppCompatActivity {

    private mHander Handler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);
        mHander = new Handler();
    }

    @Override
    public void onPostCreate(){
        mHander.postDelayed(new Runnable() {
            @Override
            public void run() {
                startActivity(new Intent(SplashActivity.this,LoginActivity.class));
                finish();
            }
        },5000);
    }
}

并从finish();方法中删除onPause(),因为当Runnable执行时,您当前的活动会自动关闭。

希望这会有所帮助!

答案 3 :(得分:-1)

首先将清单文件中的活动名称MainActivity更改为LoginActivity。

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

    </activity>

代替

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

    </activity>

比,将处理程序类用于启动屏幕

Handler handler=new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                startActivity(new Intent(SplashActivity.this,LoginActivity.class));
                finish();
            }
        },4000);