ทำให้ GUI ช้าลงใน Android

แอพ Android ของฉันทำงานได้ดี ยกเว้นลำดับสุดท้าย มันเป็นเกมและในตอนท้ายหน้าจอจะแสดงคะแนน:

TextView allscores = new TextView(this);

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

ต่อไป ฉันต้องการให้ GUI ทำงานช้าลงสองสามวินาทีเพื่อให้ผู้ใช้มีเวลารับข้อมูล บางที 2 หรือ 3 วินาทีก็ยังดี

try {
                Thread.sleep(3000);

            } catch (InterruptedException e) {

                e.printStackTrace();
            }

                            layout.removeAllViews();

จำไว้ว่าฉันยังใหม่กับการเขียนโปรแกรมเธรด ทั้งหมดนี้ทำบนเธรด UI ฉันไม่มีเธรดอื่นทำงานอยู่ ต่อไปฉันใส่หน้าจอสแปลชสุดท้ายลงท้าย:

AnView animator = new AnView(this);

            layout.addView(animator);

โดยที่ AnView เป็นส่วนขยายของ View ของฉันเอง

โดยรวมแล้วมันทำงานได้ดีมาก ปัญหาคือเธรดพักเป็นเวลา 3 วินาทีโดยไม่แสดงคะแนนสุดท้ายของฉัน ฉันไม่รู้ว่าทำไม ฉันไม่รู้ว่าทำไมมันไม่แสดงคะแนนสุดท้ายก่อนนอน จริงๆ แล้วมันจะว่างเปล่า แสดงว่าลบมุมมองทั้งหมดแล้วจึงเข้าสู่โหมดสลีป


person Community    schedule 19.12.2010    source แหล่งที่มา
comment
บางทีคำตอบสำหรับคำถามนี้อาจช่วยคุณได้: stackoverflow.com/questions/4203579/ คำสั่งการนอนหลับสำหรับ Android   -  person Curd    schedule 19.12.2010


คำตอบ (4)


คุณไม่เห็นคะแนนเนื่องจากการสลีปบนเธรด UI จะป้องกันการดำเนินการเค้าโครงและการวาดภาพที่ทำให้ข้อความของคุณมองเห็นได้ อย่านอนบนเธรด UI

การใช้เธรดใหม่สำหรับสิ่งนี้เกินความจำเป็น ใช้ตัวจัดการและเมธอด postDelayed เพื่อทำให้บางสิ่งเกิดขึ้นหลังจากการหน่วงเวลา

private final Handler mHandler = new Handler();

แล้วเมื่อคุณต้องการทำอะไรในภายหลัง

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

ตามที่คนอื่นได้ชี้ให้เห็น: อย่าใช้ sleep ในเธรด UI

สิ่งที่คุณควรทำแทนมีอธิบายไว้ที่นี่:

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

ในส่วน "การจัดการการดำเนินการที่มีราคาแพงในเธรด UI"

person Curd    schedule 19.12.2010

ไม่แนะนำให้พักเธรด UI หลักเลย ลองสิ่งนี้:

เธรดใหม่ (new Runnable () {// ทำงานที่นี่ });

หรือคุณสามารถลองใช้ป๊อปอัป Toast เพื่อทำคะแนน

person Realn0whereman    schedule 19.12.2010
comment
จริงหรือ ฉันได้รับคำแนะนำให้ทำงานส่วนใหญ่ในการเขียนโปรแกรม GUI ในเธรด UI มีเหตุผลไหมที่จะไม่นอน? - person ; 19.12.2010
comment
อ่านสองสามบรรทัดเมื่อพูดถึงโมเดลเธรดเดี่ยว developer.android com/resources/articles/ ฉันสงสัยว่าคุณเข้าสู่โหมดสลีปเธรด UI และไม่สามารถแสดงมุมมองได้ - person Realn0whereman; 19.12.2010
comment
ทำไมไม่ใช้ Listener เพื่อฟังคีย์บางคีย์จากผู้ใช้ จากนั้นไปที่หน้าจอสแปลชล่ะ ด้วยวิธีนี้ คุณสามารถจัดการให้ผู้ใช้ตลอดเวลาที่ต้องการดูคะแนน และยังใช้เธรดเดิมในขณะที่ยังคงตอบสนองอยู่เสมอ เนื่องจากคุณใช้เพียงผู้ฟังสำหรับงาน - person Luis Miguel Serrano; 19.12.2010

คุณยังสามารถใช้ตัวจับเวลาเพื่อรอ 3 วินาที ซึ่งจะเริ่มเธรดใหม่หลังจากหมดเวลา

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