Android几秒后更改活动

时间:2014-07-14 20:37:51

标签: android

我的第一个Android项目需要一些帮助。 我想写一个应用程序,它会显示一个带有ImageView的图片几秒钟,我会这样说约4秒钟,之后它会变成第二个显示按钮的活动(仅用于测试)。

我的问题是我的应用程序在我的AVD中启动后跳过图片并立即显示按钮。

我该如何解决?我抬头看了这么久,尝试了很多东西,我希望你们有一个想法:)

感谢您的帮助

这是我的主要活动代码:

     package com.example.parkourspots;
 public class MainActivity extends Activity {

private ViewTreeObserver vto;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final View myLayout = findViewById(R.id.startscreen);

    vto = myLayout.getViewTreeObserver();



    vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener(){

        @Override
        public void onGlobalLayout(){
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            Intent intent = new Intent(MainActivity.this, select_activity_class.class);

            startActivity(intent);


    }
}); 


}}

6 个答案:

答案 0 :(得分:18)

检查此代码。

package com.example.parkourspots;

public class MainActivity extends Activity {
    private static int TIME_OUT = 4000; //Time to launch the another activity
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final View myLayout = findViewById(R.id.startscreen);
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                Intent i = new Intent(MainActivity.this, ActivityTwo.class);
                startActivity(i);
                finish();
            }
        }, TIME_OUT);
    }
}); 

答案 1 :(得分:1)

您可以尝试:

public class MainActivity extends Activity {
    private Handler mHandler = new Handler();


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mHandler.postDelayed(new Runanble() {
            @Override
            public void run() {
                Intent intent = new Intent(MainActivity.this, select_activity_class.class);
                startActivity(intent);
            }
        }, 4000); // 4 seconds
    }
}

另外,您可以在AndroidManifest中添加第二个活动声明:android:finishOnTaskLaunch="true"

答案 2 :(得分:0)

1)睡觉500只睡眠0.5秒。所以它无论如何都会快速闪烁

2)睡眠不允许线程回到弯针,因此它会冻结你的UI。这意味着它无论如何都不会更新和绘制。请改用计时器。或者在这里发布消息给处理程序是可以接受的。

答案 3 :(得分:0)

问题是你只能在500毫秒(一秒钟的一半)内睡觉,所以看起来很快就会发生这种情况。在调用OnGlobalLayoutListener之后,您还希望删除它。以下是适合您的方法示例:

final Handler handler = new Handler(); // Create a Handler on the main Thread
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener(){

    @Override
    public void onGlobalLayout(){
        removeOnGlobalLayoutListener(vto, this);
        handler.postDelayed(new Runnable(){
             public void run(){
                 Intent intent = new Intent(MainActivity.this, select_activity_class.class);
                 startActivity(intent);
             }
        }, 4000); //Post back to the main Thread after 4000 mils (4 seconds)
    }
}); 

@SuppressLint("NewApi")
public static void removeOnGlobalLayoutListener(View v, ViewTreeObserver.OnGlobalLayoutListener listener){
    if (Build.VERSION.SDK_INT < 16) v.getViewTreeObserver().removeGlobalOnLayoutListener(listener); 
    else v.getViewTreeObserver().removeOnGlobalLayoutListener(listener);
}

答案 4 :(得分:0)

永远不会停止UI线程。 UI线程负责让您的应用程序保持响应。

但这是解决问题的快速替代解决方案。

public class MyActivity extends Activity {
private Handler mHandler = new Handler();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mHandler.postDelayed(new Runnable() {
        public void run() {
            doStuff();
        }
    }, 5000);
}

private void doStuff() {
    Intent intent = new Intent(MainActivity.this, select_activity_class.class);

        startActivity(intent);
}
}

然后必须在意图开始后5秒。

但我推荐异步任务

答案 5 :(得分:0)

正确和简短的解决方案

建立一个处理程序并给他们一个延迟回调自己:

final Handler h = new Handler();

h.postDelayed(new Runnable() {

   @Override

   public void run() {

     //Do something after 1s   

   }

}, 1000);

请记住1秒= 1000毫秒

使用该公式调整时间。

快乐编码。