我的项目中有两个 Activity - Splash 和 AActivity。 Splash 是主要 Activity ,运行良好。但是,如果我在 Splash Activity 运行时更改方向,则 splash Activity 的 UI 会关闭,但它会在 10 秒后打开 AActivity。
启动 Activity 的代码是 -
public class Splash extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
Thread timer = new Thread(){
public void run() {
try{
sleep(10000);
}catch(InterruptedException e){
e.printStackTrace();
}finally{
Intent AActivityIntent = new Intent("com.example.ex.AACTIVITY");
startActivity(AActivityIntent);
}
}};
timer.start();
}
@Override
protected void onPause() {
super.onPause();
finish();
}
}
即使方向发生变化,我也想将启动 Activity 的用户界面保留 10 秒。 10 秒后飞溅 Activity 应该完成。怎么做???
最佳答案
我建议您执行以下操作:
public class Splash extends Activity {
private Thread timer;
private volatile long timeLeft;
private long timeStarted;
private long timeStopped;
private static final long TIME_TO_SHOW = 100000
private static final String KEY_TIME_LEFT = "timeLeftToRun";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
if (savedInstanceState != null) {
timeLeft = savedInstanceState.getLong(KEY_TIME_LEFT, 0);
} else {
timeleft = TIME_TO_SHOW;
}
timer = new Thread() {
public void run() {
try {
sleep(timeLeft);
Intent AActivityIntent = new Intent("com.example.ex.LISTSCREEN");
startActivity(AActivityIntent);
} catch(InterruptedException e) {}
}
}};
timeStarted = SystemClock.elapsedRealtime();
timer.start();
}
@Override
protected void onPause() {
super.onPause();
timer.interrupt();
timeStopped = SystemClock.elapsedRealtime();
finish();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
timeLeft -= timeStopped - timeStarted;
if (timeLeft > 0) outState.putLong(timeLeft);
}
}
这里的主要思想是,如果 Activity 被终止,您将终止线程,但您会记下它运行了多长时间以及还剩多少时间。当 Activity 恢复后,您将执行相同的操作,只是您需要等待的时间更短。
当然,上面的代码是未经测试的,但它应该可以说明这个想法。
关于android - 方向改变时 Activity 被杀死,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8865758/