android - 方向改变时 Activity 被杀死

标签 android android-activity

我的项目中有两个 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/

相关文章:

javascript - 用js在android中打开 native 选择弹出窗口

android studio Logcat在单行和部分数据中显示json数据

android - 在 Android 上使用 Retrofit 实现对象内部的 TypedFile

java - 在服务之外的 Retrofit 本身的 onReponse() 之后执行当前 Activity 中的函数

android - Android服务如何知道它没有绑定(bind)到任何 Activity

android - IBM MobileFirst 7 依赖项

android - 如何使用两个子值在 Firebase 中进行搜索?

android - 我想将上下文菜单应用于所有 Activity ,包括 listActivities 和 tabActivities

android - 从堆栈android中删除顶部 Activity

android - 如何更新暂停 Activity 的 TextView