Memperlambat GUI di Android

Aplikasi Android saya berfungsi dengan baik, kecuali urutan akhir. Ini adalah permainan dan di akhir layar menampilkan skor:

TextView allscores = new TextView(this);

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

Selanjutnya saya ingin GUI melambat selama beberapa detik sehingga pengguna punya waktu untuk menyerap informasi. Mungkin 2 atau 3 detik sudah cukup.

try {
                Thread.sleep(3000);

            } catch (InterruptedException e) {

                e.printStackTrace();
            }

                            layout.removeAllViews();

Ingatlah, saya baru mengenal pemrograman thread. Semua ini dilakukan di thread UI, saya tidak menjalankan thread lain. Selanjutnya saya memasukkan akhir layar splash terakhir:

AnView animator = new AnView(this);

            layout.addView(animator);

di mana AnView adalah ekstensi View saya sendiri.

Secara keseluruhan, semuanya berjalan dengan baik. Masalahnya adalah thread tersebut tidak aktif selama 3 detik tanpa menunjukkan skor akhir saya. Saya tidak tahu kenapa. Entah kenapa tidak muncul skor akhirku sebelum tidur. Ini sebenarnya menjadi kosong, menunjukkan bahwa itu menghapus semua tampilan dan kemudian tidur.


person Community    schedule 19.12.2010    source sumber
comment
Mungkin jawaban atas pertanyaan ini membantu Anda: stackoverflow.com/questions/4203579/ perintah-tidur-untuk-android   -  person Curd    schedule 19.12.2010


Jawaban (4)


Anda tidak melihat skornya karena tidur di thread UI mencegah operasi tata letak dan gambar yang membuat perubahan teks Anda terlihat. Jangan pernah tidur di thread UI.

Menggunakan thread baru untuk ini berlebihan. Gunakan Handler dan metode postDelayed untuk membuat sesuatu terjadi setelah penundaan.

private final Handler mHandler = new Handler();

Lalu ketika Anda ingin melakukan sesuatu nanti,

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

Seperti yang ditunjukkan orang lain: jangan gunakan sleep di thread UI.

Apa yang harus Anda lakukan dijelaskan di sini:

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

di bagian "Menangani Operasi Mahal di UI Thread"

person Curd    schedule 19.12.2010

Tidak disarankan untuk menidurkan thread UI utama. Cobalah sesuatu seperti ini:

Thread baru(new Runnable(){ //bekerja di sini });

Atau Anda dapat mencoba menggunakan popup Toast untuk skornya.

person Realn0whereman    schedule 19.12.2010
comment
Benar-benar? Saya disarankan untuk melakukan sebagian besar pekerjaan dalam pemrograman GUI di thread UI. Apakah ada alasan untuk tidak tidur? - person ; 19.12.2010
comment
Bacalah beberapa baris ke bawah ketika membahas tentang model thread tunggal developer.android. com/resources/articles/ Saya curiga Anda mematikan thread UI dan bahkan tidak dapat menampilkan tampilan. - person Realn0whereman; 19.12.2010
comment
Mengapa tidak menggunakan pendengar saja untuk mendengarkan beberapa kunci dari pengguna, dan kemudian melanjutkan ke layar splash? Dengan begitu, Anda dapat memberikan waktu yang dibutuhkan pengguna untuk melihat skor, dan juga menggunakan thread yang sama sambil menjaganya tetap responsif, karena Anda hanya menggunakan pendengar untuk pekerjaan tersebut. - person Luis Miguel Serrano; 19.12.2010

Anda juga dapat menggunakan Timer untuk menunggu 3 detik, yang akan memulai thread baru setelah waktu habis.

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