【问题标题】:android postDelayed method doesn't workandroid postDelayed方法不起作用
【发布时间】:2015-08-19 13:01:23
【问题描述】:

我正在尝试为我的应用制作启动画面。我使用了postDelayed 方法。这是我的代码:

   public class SplashScreenActivity extends Activity {

    private static final int SPLASH_DURATION_MS = 1500;

    private static final String TAG = SplashScreenActivity.class.getSimpleName();

    private Handler mHandler = new Handler();

    public static final int sdkVersion = Build.VERSION.SDK_INT;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash_screen);

        Random r = new Random();
        int imageNumber = r.nextInt(2 - 0) + 0;

        ImageView splashScreenBackground = (ImageView)findViewById(R.id.splash_screen_image);
        switch (imageNumber){
            case 0:
                if(sdkVersion > 20)
                    splashScreenBackground.setBackground(getDrawable(R.drawable.splash_screen_back));
                else
                    splashScreenBackground.setBackgroundDrawable(getResources().getDrawable(R.drawable.splash_screen_back));
                return;
            case 1:
                if(sdkVersion > 20)
                    splashScreenBackground.setBackground(getDrawable(R.drawable.buffon));
                else
                    splashScreenBackground.setBackgroundDrawable(getResources().getDrawable(R.drawable.buffon));
                return;
        }

        mHandler.postDelayed(mEndSplash, SPLASH_DURATION_MS);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        mEndSplash.run();
        return super.onTouchEvent(event);
    }

    private Runnable mEndSplash = new Runnable() {
        public void run() {
            if (!isFinishing()) {
                mHandler.removeCallbacks(this);

                Log.d(TAG, "Debugging before intent");
                startActivity(new Intent(
                        SplashScreenActivity.this, MainActivity.class
                ));
                Log.d(TAG, "Debugging after intent");
                finish();
            }
        };
    };

}

这是onCreate方法中的调用:

mHandler.postDelayed(mEndSplash, SPLASH_DURATION_MS);

问题是在我按下屏幕之前,活动不会改变。

另一件事,MainActivity 课程已收费并显示日志,但我没有在屏幕上看到它! 我想知道有什么问题。 谢谢

【问题讨论】:

  • 在您的 run 方法中添加一些 Log.d 调用
  • 问题是你正在调用 mEndSplash.run();来自 onTouchEvent(MotionEvent 事件)。所以它只有在你点击屏幕时才有效。
  • @techroid 我也把它称为 postdelayed
  • 显示你在哪里使用这条线mHandler.postDelayed(mEndSplash, SPLASH_DURATION_MS);
  • SPLASH_DUR_MS 的值是多少?顺便说一句,这不是飞溅的持续时间,而是启动它的延迟。

标签: android android-runonuithread


【解决方案1】:

您在开关中使用的是return 而不是break,因此永远无法到达带有处理程序的代码。

【讨论】:

    【解决方案2】:
    ImageView splashScreenBackground = (ImageView)findViewById(R.id.splash_screen_image);
    
    splashScreenBackground.setImageResource(R.drawable.splash_screen_back);
    
    new Handler().postDelayed(new Runnable() {
    
            @Override
            public void run() {
        startActivity(new Intent(SplashScreenActivity.this, MainActivity.class));
    
        }
      }, 1500);
    

    【讨论】:

    • 只需使用此代码,它就会对您有好处 快乐编码
    【解决方案3】:

    在您的 Splash Activity 中尝试以下代码。

    首先,声明跟随

    private Timer mTimer;// timer for running splash screen for 1500 millisecods(i.e. 1.5 seconds)
    

    然后,在 onCreate() 中,输入以下代码

    mTimer = new Timer();
        mTimer.schedule(new TimerTask() {
            @Override
            public void run() { 
    
                startActivity(new Intent(
                        SplashScreenActivity.this, MainActivity.class
                 mTimer.cancel();
                SplashScreenActivity.this.finish();
    
            }
        }, 1500);
    

    【讨论】:

    • 它不起作用,甚至没有启动MainActivity
    • downvoter 请解释一下,以便我也知道这个 sn-p 的问题?
    • @AhHa 在你调用的地方调用 mHandler.postDelayed(mEndSplash, SPLASH_DURATION_MS);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    • 2012-08-22
    • 1970-01-01
    相关资源
    最近更新 更多