我的项目中有两项活动 - Splash和AActivity。 Splash是主要的活动,并且工作正常。但是如果我在Splash活动运行时更改方向,则启动活动的UI会关闭,但会在10秒后打开AActivity。
启动活动的代码是 -
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();
}
}
即使方向发生变化,我也想保留启动活动的UI 10秒钟。 10秒后,应完成飞溅活动。怎么做???
答案 0 :(得分:2)
我建议你做以下事情:
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);
}
}
这里的主要想法是,如果活动被杀死,你会杀死该线程,但是你会注意它运行了多长时间以及它剩下多少时间。恢复活动后,您将执行相同的操作,但必须等待较短的时间。
上面的代码当然是未经测试的,但它应该说明这个想法。
答案 1 :(得分:2)
在下面的块中插入您的清单。 这意味着由您的“活动”控制的方向变化情况。 http://developer.android.com/guide/topics/manifest/activity-element.html#config
机器人:configChanges = “取向”
还有更多。
覆盖“onConfigurationChanged”方法。
试试这个。你可以做你想做的一切。
答案 2 :(得分:0)
使用Alarmmanager代替使用线程延迟启动活动,即使您要退出应用程序,也可以随时取消待处理的警报