Dapatkah seseorang memberikan contoh sederhana memperbarui bidang teks setiap detik?
Saya ingin membuat bola terbang dan perlu menghitung / memperbarui koordinat bola setiap detik, itu sebabnya saya perlu semacam timer.
Saya tidak mendapatkan apa-apa dari sini .
Jawaban:
ok karena ini belum dihapus belum ada 3 cara sederhana untuk menangani ini. Di bawah ini adalah contoh yang menunjukkan semua 3 dan di bagian bawah adalah contoh yang menunjukkan hanya metode yang saya percaya lebih disukai. Ingat juga untuk membersihkan tugas Anda di onPause, simpan kondisi jika perlu.
hal utama yang perlu diingat adalah bahwa UI hanya dapat dimodifikasi dari utas ui utama jadi gunakan handler atau activity.runOnUIThread (Runnable r);
Inilah yang saya anggap sebagai metode yang disukai.
sumber
Itu sederhana! Anda membuat timer baru.
Kemudian Anda memperpanjang tugas penghitung waktu
Dan kemudian menambahkan tugas baru ke Timer dengan beberapa interval pembaruan
Penafian: Ini bukan solusi yang ideal. Ini adalah solusi menggunakan kelas Timer (seperti yang diminta oleh OP). Di Android SDK, disarankan untuk menggunakan kelas Handler (ada contoh dalam jawaban yang diterima).
sumber
Jika Anda juga perlu menjalankan kode Anda pada utas UI (dan bukan pada utas timer), lihat di blog: http://steve.odyfamily.com/?p=12
sumber
Jika seseorang hanya ingin menjadwalkan hitung mundur hingga waktu di masa mendatang dengan pemberitahuan reguler pada interval di sepanjang jalan, Anda dapat menggunakan kelas CountDownTimer yang tersedia sejak API level 1.
sumber
SS:MiMi
? Terima kasihIni adalah beberapa kode sederhana untuk penghitung waktu:
sumber
Saya pikir Anda bisa melakukannya dengan cara Rx seperti:
Dan batalkan ini seperti:
Timer Rx http://reactivex.io/documentation/operators/timer.html
sumber
Karena pertanyaan ini masih menarik banyak pengguna dari pencarian google (tentang Android timer) saya ingin memasukkan dua koin saya.
Pertama-tama, kelas Timer akan ditinggalkan dalam Java 9 (baca jawaban yang diterima) .
Cara resmi yang disarankan adalah dengan menggunakan ScheduledThreadPoolExecutor yang lebih efektif dan kaya fitur yang juga dapat menjadwalkan perintah untuk dijalankan setelah penundaan yang diberikan, atau untuk mengeksekusi secara berkala. Plus, ini memberikan fleksibilitas dan kemampuan tambahan dari ThreadPoolExecutor.
Berikut adalah contoh penggunaan fungsi polos.
Buat layanan pelaksana:
Jadwalkan saja jadwal Anda:
Anda sekarang dapat menggunakan
future
untuk membatalkan tugas atau memeriksa apakah itu dilakukan misalnya:Semoga Anda menemukan ini berguna untuk membuat tugas di Android.
Contoh lengkap:
sumber
Saya terkejut bahwa tidak ada jawaban yang akan menyebutkan solusi dengan RxJava2 . Ini sangat sederhana dan menyediakan cara mudah untuk mengatur timer di Android.
Pertama, Anda perlu mengatur ketergantungan Gradle, jika Anda belum melakukannya:
(ganti
x
dany
dengan nomor versi saat ini )Karena kita baru saja memiliki TUGAS TAK BERKAS , sederhana , kita dapat menggunakan
Completable
objek:Untuk REPEATING TASK , Anda dapat menggunakan
Observable
cara yang serupa:Schedulers.computation()
memastikan bahwa timer kami berjalan di utas latar dan.observeOn(AndroidSchedulers.mainThread())
berarti kode yang kami jalankan setelah timer selesai akan dilakukan pada utas utama.Untuk menghindari kebocoran memori yang tidak diinginkan, Anda harus memastikan untuk berhenti berlangganan saat Aktivitas / Fragmen dihancurkan.
sumber
Subscription
kembali dengan.subscribe()
metode dalam variabel dan kemudian panggilsubscription.unsubscribe()
ketika Anda ingin menghentikan timer.Dia adalah solusi yang lebih sederhana, berfungsi dengan baik di aplikasi saya.
sumber
Anda ingin pembaruan UI Anda terjadi di utas UI yang sudah ada.
Cara terbaik adalah menggunakan Handler yang menggunakan postDelayed untuk menjalankan Runnable setelah penundaan (masing-masing menjalankan jadwal berikutnya); hapus callback dengan removeCallbacks.
Anda sudah mencari di tempat yang tepat, jadi lihat lagi, mungkin jelaskan mengapa contoh kode itu tidak seperti yang Anda inginkan. (Lihat juga artikel identik di Memperbarui UI dari Timer ).
sumber
Berikut ini cara yang andal dan sederhana ...
Masukkan kode berikut ke dalam Aktivitas Anda, dan metode centang () akan dipanggil setiap detik di utas UI saat aktivitas Anda dalam keadaan "dilanjutkan". Tentu saja, Anda dapat mengubah metode centang () untuk melakukan apa yang Anda inginkan, atau lebih sering dipanggil.
Bagi mereka yang tertarik, kode "_h0 = _handler" diperlukan untuk menghindari dua timer berjalan secara bersamaan jika aktivitas Anda dijeda dan dilanjutkan dalam periode centang.
sumber
_h0
pendekatan canggung ini , bukannyaremoveCallbacks
masukonPause
, seperti orang lain?Anda juga dapat menggunakan animator untuk itu:
sumber
Anda perlu membuat utas untuk menangani loop pembaruan dan menggunakannya untuk memperbarui textarea. Bagian yang sulit adalah bahwa hanya utas utama yang benar-benar dapat memodifikasi ui sehingga utas loop pembaruan perlu memberi sinyal utas utama untuk melakukan pembaruan. Ini dilakukan menggunakan Handler.
Lihat tautan ini: http://developer.android.com/guide/topics/ui/dialogs.html# Klik pada bagian berjudul "Contoh ProgressDialog dengan utas kedua". Ini adalah contoh dari apa yang perlu Anda lakukan, kecuali dengan dialog kemajuan alih-alih bidang teks.
sumber
sumber
Jika ada yang tertarik, saya mulai bermain-main dengan membuat objek standar untuk dijalankan pada utas aktivitas UI. Tampaknya bekerja ok. Komentar diterima. Saya ingin ini tersedia di perancang tata letak sebagai komponen untuk menarik ke Kegiatan. Tidak percaya sesuatu seperti itu belum ada.
Dalam aktivitas tersebut, saya memiliki ini di mulai:
sumber
.xml
sumber
Jika Anda sudah punya waktu delta.
sumber
Saya abstrak Timer dan membuatnya menjadi kelas yang terpisah:
Dan Ekstrak tindakan utama dari
Timer
kelas sebagaiDan saya menggunakannya seperti ini:
Saya Berharap Ini Membantu 😊👌
sumber
Saya menggunakan cara ini:
lalu di bawah onCreate
cara mudah untuk mengatasi masalah ini.
sumber
Bagi mereka yang tidak bisa mengandalkan Chronometer , saya membuat kelas utilitas dari salah satu saran:
untuk digunakan..hanya lakukan:
.....
sumber