Android的取消闪屏 [英] Android cancelable splash screen

查看:227
本文介绍了Android的取消闪屏的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图创建一个具有横幅醒目网页和取消按钮,按以下规则:

I'm trying to create a Splash page that has a banner and cancel button, by the following rules:


  1. 如果没有什么是pressed,转到主要活动5秒后。

  2. 如果取消按钮是pressed,马上去主要活动。

  3. 如果旗帜,是pressed,去其他的活动。

我的code:

public class BannerSplashActivity extends Activity {
    private static final int TIMEOUT = 5000;

    private View mButtonCancel;
    private SplashHolderTask mSplashHolderTask;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.form_banner_splash);

        // Excecute task
        mSplashHolderTask = new SplashHolderTask();
        mSplashHolderTask.execute();

        // find references
        mButtonCancel = findViewById(R.id.buttonCancel);
        mButtonCancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mSplashHolderTask.cancel(true);
                goToMainActivity();
            }
        });
    }

    private void goToMainActivity(){
        startActivity(new Intent(this, MainActivity.class));
        finish();
    }


    /**
     * This task holds the bannerSplash
     */
    private class SplashHolderTask extends AsyncTask<Void, Void, Void>{

        @Override
        protected Void doInBackground(Void... params) {
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    goToMainActivity();
                }
            }, TIMEOUT);

            return null;
        }
    }
}

当我运行我的code我得到:

When I run my code I'm getting:

Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

我怎样才能实现这个逻辑?

How can I implement that logic?

推荐答案

例外,因为你创建一个处理程序里面另一个线程..
通过改变你的code这样你可以得到你想要的东西。

The Exception because you creating a Handler inside another thread.. By changing your code like this you can get what you want exactly..

public class BannerSplashActivity extends Activity {
private static final int TIMEOUT = 5000;

private View mButtonCancel;

private Handler handler = new Handler();
private Runnable runnable;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.form_banner_splash);
    runnable = new Runnable() {

        @Override
        public void run() {
            goToMainActivity();
        }
    };
    handler.postDelayed(runnable, TIMEOUT);

    // find references
    mButtonCancel = findViewById(R.id.buttonCancel);
    mButtonCancel.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            handler.removeCallbacks(runnable);
            goToMainActivity();
        }
    });
}

private void goToMainActivity() {
    startActivity(new Intent(this, MainActivity.class));
    finish();
}
}

我没有使用任何线程或AsynchTasks。

I am not using any Threads or AsynchTasks.

这篇关于Android的取消闪屏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆