How to pause / sleep thread or process in Android?

后端 未结 12 887
故里飘歌
故里飘歌 2020-11-22 05:49

I want to make a pause between two lines of code, Let me explain a bit:

-> the user clicks a button (a card in fact) and I show it by changing the background of thi

12条回答
  •  一生所求
    2020-11-22 06:32

    You can try this one it is short

    SystemClock.sleep(7000);
    

    WARNING: Never, ever, do this on a UI thread.

    Use this to sleep eg. background thread.


    Full solution for your problem will be: This is available API 1

    findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(final View button) {
                    button.setBackgroundResource(R.drawable.avatar_dead);
                    final long changeTime = 1000L;
                    button.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            button.setBackgroundResource(R.drawable.avatar_small);
                        }
                    }, changeTime);
                }
            });
    

    Without creating tmp Handler. Also this solution is better than @tronman because we do not retain view by Handler. Also we don't have problem with Handler created at bad thread ;)

    Documentation

    public static void sleep (long ms)

    Added in API level 1

    Waits a given number of milliseconds (of uptimeMillis) before returning. Similar to sleep(long), but does not throw InterruptedException; interrupt() events are deferred until the next interruptible operation. Does not return until at least the specified number of milliseconds has elapsed.

    Parameters

    ms to sleep before returning, in milliseconds of uptime.

    Code for postDelayed from View class:

    /**
     * 

    Causes the Runnable to be added to the message queue, to be run * after the specified amount of time elapses. * The runnable will be run on the user interface thread.

    * * @param action The Runnable that will be executed. * @param delayMillis The delay (in milliseconds) until the Runnable * will be executed. * * @return true if the Runnable was successfully placed in to the * message queue. Returns false on failure, usually because the * looper processing the message queue is exiting. Note that a * result of true does not mean the Runnable will be processed -- * if the looper is quit before the delivery time of the message * occurs then the message will be dropped. * * @see #post * @see #removeCallbacks */ public boolean postDelayed(Runnable action, long delayMillis) { final AttachInfo attachInfo = mAttachInfo; if (attachInfo != null) { return attachInfo.mHandler.postDelayed(action, delayMillis); } // Assume that post will succeed later ViewRootImpl.getRunQueue().postDelayed(action, delayMillis); return true; }

提交回复
热议问题