Android 如何在5秒钟后更改活动?

Android 如何在5秒钟后更改活动?,android,android-animation,Android,Android Animation,我用我的个人标志做了一种索引活动。 我想在5秒钟后改变活动。 所以我准备了2个布局,我运行了启动器。 在我设置的启动器活动中: Intent intent = new Intent(Home.this, IndexActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); try { Thread.sleep(5000); } catch (Int

我用我的个人标志做了一种索引活动。 我想在5秒钟后改变活动。 所以我准备了2个布局,我运行了启动器。 在我设置的启动器活动中:

Intent intent = new Intent(Home.this, IndexActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        startActivity(intent);
        finish();
问题在于,活动在白色活动中保持阻塞状态,5秒钟后更改活动

我犯了错误吗


如何创建淡入淡出动画?我怎样才能运行它?谢谢

您不应该阻止主线程。它负责更新UI,如果您阻止它,用户界面将冻结


相反,请使用
处理程序及其
postDelayed
方法。

首先在动画文件夹中声明

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true" >

    <alpha
        android:duration="1000"
        android:fromAlpha="0.0"
        android:interpolator="@android:anim/accelerate_interpolator"
        android:toAlpha="1.0" />

</set>
然后在
startActivity(意图)之后

写入
重写结束转换(animFadein,animFadeout)

以下是详细资料:

fade_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true" >

    <alpha
        android:duration="1000"
        android:fromAlpha="1.0"
        android:interpolator="@android:anim/accelerate_interpolator"
        android:toAlpha="0.0" />

</set>
fade_out.xml
Thread.sleep()
会降低性能。您可以使用
Handler
class'
postDelayed()
方法执行以下操作:

Handler mHandler = new Handler();
mHandler.postDelayed(new Runnable() {

    @Override
    public void run() {
        Intent intent = new Intent(Home.this, IndexActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
        startActivity(intent);
        finish();
    }

}, 5000L);

看看这个:“Thread.sleep()会降低性能”->不是真的,它做了它应该做的事情。@2Dee不,这不是让任何线程等待的有效方法。你能解释一下为什么你认为Thread.sleep()不是让任何线程等待的有效方法吗?我找不到任何支持这一说法的东西…@2Dee我也在寻找一个链接,我在上面读到了这个链接,可以给你发帖子。两三个经验丰富的家伙已经告诉我不要使用Thread.sleep()
其中一个也给我发了一个链接。我一找到就告诉你。是的,我就是这么想的,你不明白你在做什么。Commonware answer基本上说,如果您需要执行后台操作并完成UI工作,那么使用postDelayed比创建后台线程更有效。他从不暗示Thread.sleep会导致性能问题。您对Thread.suspend的定义也不正确,请参阅或。你只是在让你自己难堪。。。
Handler mHandler = new Handler();
mHandler.postDelayed(new Runnable() {

    @Override
    public void run() {
        Intent intent = new Intent(Home.this, IndexActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
        startActivity(intent);
        finish();
    }

}, 5000L);