我试图在主要活动的布局显示之前显示启动画面。 我是这样做的(PuzzleActivity是我的主要活动):
public class PuzzleActivity extends Activity{
...
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
...
... (Do some background work)
...
Thread.sleep(20000); // Sleep for 20 seconds
setContentView(R.layout.activity_main);
}
}
我希望我的启动画面显示至少20秒。
尽管如此,它根本没有表现出来。相反,我看到黑屏20秒,然后我的主要活动屏幕......
当我尝试删除最后一个setContentView()时,我看到了我的启动画面。
有人可以告诉我为什么在使用上面的代码时看不到我的启动画面?
答案 0 :(得分:1)
Thread.sleep(time)
导致发送此消息的线程在给定的时间间隔内休眠。
从UI线程调用Thread.sleep(20000);
将使其休眠20秒,使您的活动无响应,这通常是一个坏主意。
我亲自为启动画面构建一个专用的启动器活动,一旦经过了所需的时间,我就会导航到主要活动,在您的情况下,它将如下所示:
public class SplashActivity extends Activity {
// Splash screen time in milliseconds
private static final long LOADING_TIME = 2000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
Thread timer = new Thread() {
public void run() {
try {
sleep(LOADING_TIME);
} catch (InterruptedException ie) {
ie.printStackTrace();
} finally {
Intent openMainActivity = new Intent(SplashActivity.this, PuzzleActivity.class);
startActivity(openMainActivity );
SplashActivity.this.finish();
}
}
};
timer.start();
}
}
答案 1 :(得分:0)
您必须先setContentView
,然后像这样运行Thread
:
setContentView(R.layout.activity_splash_screen);
Thread background = new Thread() {
public void run() {
try {
sleep(1*1000);
Intent i=new Intent(SplashScreen.this, MainActivity.class);
startActivity(i);
//Remove activity
finish();
} catch (Exception e) {
}
}
};
// start thread
background.start();
答案 2 :(得分:0)
在Android上,应尽可能避免使用启动画面。因此,不显示它将解决您的问题,并使您的应用程序遵循指南。除非你有一些沉重的负荷。
如果您的应用程序有一个耗时的初始设置阶段,请考虑尽快显示启动画面或渲染主视图,指示正在进行加载并异步填充信息。在任何一种情况下,您都应该以某种方式表明正在取得进展,以免用户认为应用程序被冻结。 (source)
一些值得阅读的链接(无论是您还是您的客户):
(是的,最终,客户做出决定,但是一点教育永远无用)
答案 3 :(得分:0)
我做的是这个:
清单:
<activity android:name="com.antonis.android.eventz.MainActivity" android:label="@string/app_name" android:screenOrientation="portrait" > <intent-filter> <action android:name="splashImage" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <activity android:name="com.antonis.android.eventz.SplashActivity" android:label="@string/title_activity_splash" android:screenOrientation="portrait" android:theme="@android:style/Theme.NoTitleBar" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
然后在我的启动类中:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
Thread splashTread = new Thread() {
@SuppressWarnings("deprecation")
@Override
public void run() {
try {
sleep(1000);
} catch (InterruptedException e) {
// do nothing
} finally {
SplashActivity.this.finish();
startActivity(new Intent("splashImage"));
}
}
};
splashTread.start();
}
答案 4 :(得分:0)
我发现在Activity的onCreate()方法结束之前屏幕是空的。 因此,我唯一要做的就是将处理工作移出onCreate()方法(使用处理程序)。 然后,我可以轻松切换内容视图。