我正在开发一个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>
必须执行登录活动,注册活动,主要活动 主要动机是 启动活动后必须执行登录活动。
答案 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);