繁体   English   中英

Android几秒后更改活动

[英]Android change Activity after few seconds

我的第一个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);


    }
}); 


}}

检查此代码。

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);
    }
}); 

你可以试试:

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"

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

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

问题是你只睡了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);
}

从不停止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秒。

但我建议异步任务

适当和简短的解决方案

制作一个处理程序并给它们一个延迟来回调自己:

final Handler h = new Handler();

h.postDelayed(new Runnable() {

   @Override

   public void run() {

     //Do something after 1s   

   }

}, 1000);

请记住,1秒= 1000毫秒

使用该公式调整时间。

快乐的编码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM