我试图创建一个非常简单的应用程序,它具有通向主要活动的启动画面。有人可以指出为什么闪屏的睡眠会无限期地持续下去吗? 如果我删除了睡眠功能,该应用程序正常工作。
Splash class:
package com.example.myfirstapp.app;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
public class Splash extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
Thread timer = new Thread(){
@Override
public void run() {
super.run();
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
Intent open = new Intent("android.intent.action.MAINACTIVITY");
startActivity(open);
}
}
};
}
}
清单:
<?xml version="1.0" encoding="utf-8"?>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.myfirstapp.app.Splash"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.example.myfirstapp.app.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAINACTIVITY" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
答案 0 :(得分:3)
需要启动线程。致电timer.start()
。
答案 1 :(得分:2)
您没有启动该主题。这就是问题的答案,但你真的不应该为此开始一个线索。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
new Handler().postDelayed(new Runnable(){
@Override
public void run() {
Intent intent = new Intent(this, com.example.myfirstapp.app.MainActivity.class);
startActivity(intent);
finish();
}
}, 1000);
}
我还向您展示了一种更好的方式来启动活动(不是通过字符串),我调用finish()
来关闭启动画面,这样当他们按下它时它不再显示启动画面
关于帖子的快速说明
线程很昂贵,它们需要时间和内存才能启动。因此,将它们旋转为一次性任务永远不会有意义。此外,在它们上运行的代码需要考虑threadsafety,而我的解决方案将在请求它稍后运行的同一ui线程上运行。如果你确实要求代码并行运行(在这里你不是),我仍然建议你在99%的情况下使用AsyncTask
过线程。