更改方向时,活动会被杀死

时间:2012-01-14 22:11:39

标签: android android-activity

我的项目中有两项活动 - 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秒后,应完成飞溅活动。怎么做???

3 个答案:

答案 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代替使用线程延迟启动活动,即使您要退出应用程序,也可以随时取消待处理的警报