Slowing the GUI down in Android

有些话、适合烂在心里 提交于 2020-01-06 04:36:26

问题


My Android App works fine, except the end sequence. Its a game and at the end the screen shows the score:

TextView allscores = new TextView(this);

allscores.setText("Your score: "+ mypoints);

Next I want the GUI to slowdown for a few seconds so the user has time to take in the information. Maybe 2 or 3 secs is fine.

try {
                Thread.sleep(3000);

            } catch (InterruptedException e) {

                e.printStackTrace();
            }

                            layout.removeAllViews();

Bear in mind, I'm new to thread programming. All this is done on the UI thread, I have no other threads running. Next I put in a final splash screen ending:

AnView animator = new AnView(this);

            layout.addView(animator);

where AnView is my own extension of View.

All in all it runs great. Problem is the thread sleeps for 3 seconds without showing my final score. I don't know why. I don't know why it doesn't show my final score before sleeping. It actually goes blank, indicating that it removed all views and then slept.


回答1:


You're not seeing the score because sleeping on the UI thread prevents the layout and drawing operations that make your text changes visible. Never sleep on the UI thread.

Using a new thread for this is overkill. Use a Handler and the postDelayed method to make something happen after a delay.

private final Handler mHandler = new Handler();

Then when you want to do something later,

mHandler.postDelayed(new Runnable() {
    public void run() {
        doDelayedThing();
    }
}, 3000);



回答2:


As others have pointed out: don't use sleep in the UI thread.

What you should do instead is described here:

http://developer.android.com/guide/appendix/faq/commontasks.html#threading

in section "Handling Expensive Operations in the UI Thread"




回答3:


It is not recommended to ever sleep the main UI thread. Try something like this:

new Thread(new Runnable(){ //do work here });

Or you could try using a Toast popup for the score.




回答4:


You can also use Timer to wait 3 seconds, which will start a new thread after the time runs out.

Timer timer = new Timer();
timer.schedule(new TimerTask() {
    @Override
    public void run() {
                AnView animator = new AnView(this);
                layout.addView(animator);
    }
}, 3000);


来源:https://stackoverflow.com/questions/4483650/slowing-the-gui-down-in-android

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!