Rumah > Java > javaTutorial > Bagaimana untuk Melaksanakan Pemasa Undur dalam Android Menggunakan Thread?

Bagaimana untuk Melaksanakan Pemasa Undur dalam Android Menggunakan Thread?

DDD
Lepaskan: 2024-11-05 20:11:02
asal
526 orang telah melayarinya

How to Implement a Countdown Timer in Android Using Threads?

Benang Pemasa dalam Android: Panduan Komprehensif

Masalah:
Blok kod Java untuk mencipta benang pemasa undur dalam Android tidak berfungsi. Matlamatnya ialah untuk mencipta pemasa yang mengira detik dari 5 minit hingga 0:00, mengemas kini paparan masa pada TextView.

Penyelesaian:

1 . Sekatan Kemas Kini Thread UI:
Thread selain dari thread UI tidak boleh mengemas kini antara muka pengguna secara langsung. Dalam kes ini, utas sedang cuba mengubah suai TextView daripada utas latar belakang, yang tidak dibenarkan.

2. Pendekatan Disyorkan:

  • CountDownTimer: Android menyediakan kelas yang mudah untuk kira detik, yang mengendalikan kemas kini UI secara automatik.
  • Pengendali: Menjadualkan tugasan untuk dilaksanakan pada selang waktu tertentu dan menyediakan cara untuk melaksanakan kemas kini UI daripada urutan latar belakang.
  • Pemasa: Membenarkan penjadualan tugas pada urutan berasingan, tetapi secara eksplisit memerlukan penyegerakan utas untuk mengemas kini elemen UI.

3. Contoh Pelaksanaan Alternatif:

a. CountDownTimer

<code class="java">public class MainActivity extends Activity {

    Button b;
    TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView) findViewById(R.id.textView1);
        b = (Button) findViewById(R.id.button1);

        b.setOnClickListener(v -> startTimer(120000)); // start countdown for 2 minutes
    }

    private void startTimer(long time) {
        CountDownTimer counter = new CountDownTimer(time, 1000){
            public void onTick(long millisUntilDone) {
                tv.setText("You have " + millisUntilDone + "ms");
            }

            public void onFinish() {
                tv.setText("DONE!");
            }
        }.start();
    }
}</code>
Salin selepas log masuk

b. Pengendali

<code class="java">Handler m_handler;
Runnable m_handlerTask;
int timeLeft = 100;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    m_handler = new Handler();
    m_handlerTask = () -> {
        if (timeLeft >= 0) {
            Log.i("timeleft", "" + timeLeft);
            timeLeft--;
        } else {
            m_handler.removeCallbacks(m_handlerTask); // cancel run
        }
        m_handler.postDelayed(m_handlerTask, 1000);
    };
    m_handlerTask.run();
}</code>
Salin selepas log masuk

c. Pemasa

<code class="java">int timeLeft = 100;
Timer _t = new Timer();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    _t.scheduleAtFixedRate(new TimerTask() {
        @Override
        public void run() {
            runOnUiThread(() -> {
                Log.i("timeleft", "" + timeLeft);
                // update UI elements here
            });
            if (timeLeft > 0) {
                timeLeft--;
            } else {
                _t.cancel();
            }
        }
    }, 1000, 1000);
}</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Pemasa Undur dalam Android Menggunakan Thread?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan