我通过以下方式定义了一个启动画面:
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ExceptionHandler.register(this);
setFullscreen();
splashScreen();
}
private void splashScreen() {
runOnUiThread(new Runnable() {
@Override
public void run() {
setContentView(R.layout.splashscreen);
splash = (ImageView) findViewById(R.id.splashscreenLayer);
startSplashTime = new Date();
}
});
new LoadingThread().start();
}
private class LoadingThread extends Thread {
@Override
public void run() {
checkNetwork();
}
}
在checkNetwork()方法的特定条件下,调用stopSplash方法:
public void stopSplash() {
Message msg = new Message();
msg.what = STOPSPLASH;
Date endSplashTime = new Date();
long time = endSplashTime.getTime() - startSplashTime.getTime();
System.out.println("Time Splashscreen was displayed: " + time);
if (time < SPLASH_MIN_TIME) {
long delay = SPLASH_MIN_TIME - time;
System.out.println("Delay Splashscreen for: " + delay);
try {
Thread.sleep(delay);
} catch (InterruptedException e) {
e.printStackTrace();
}
splashHandler.sendMessage(msg);
} else {
System.out.print("Show Splashscreen now");
splashHandler.sendMessage(msg);
}
}
private Handler splashHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case STOPSPLASH:
splash.setVisibility(View.GONE);
break;
}
super.handleMessage(msg);
}
};
问题是,如果我直接从Eclipse启动应用程序,有时候(可能是10个中的1个),Splashscreen没有显示,而只是黑屏。
其他问题:如果我重新启动应用,例如单击设备上的后退按钮后调用onDestroy()后,几乎不会显示Splashscreen。
任何提示为什么?
我的假设:可能是,LoadingThread比Runnable“更快”启动,因此网络人员在Splashscreen设置之前完成了吗?
答案 0 :(得分:0)
您可以尝试在实施中使用CountdownTimer。在你的第一个活动中,启动一个CountdownTimer,每隔一段时间检查onTick()以获得一个同步的boolean finishedLoading,并在onFinish()(15秒或者其他)中使用某种超时,而你的加载是在另一个设置finishedLoading的线程中完成的。完成时为真。
答案 1 :(得分:0)
在v =下一个活动开始之前,可能没有终止启动画面..只是一个想法..