165 Stimmen

Wie man eine Methode alle X Sekunden ausführt

Ich entwickle eine Android 2.3.3-Anwendung, und ich muss eine Methode jedes Mal ausführen X Sekunden .

Unter iOS habe ich NSTimer , aber bei Android weiß ich nicht, was ich verwenden soll.

Jemand hat mir empfohlen Handler ; ein anderer empfiehlt mir AlarmManager aber ich weiß nicht, welche Methode besser geeignet ist für NSTimer .

Dies ist der Code, den ich in Android implementieren möchte:

timer2 = [
    NSTimer scheduledTimerWithTimeInterval:(1.0f/20.0f)
    target:self
    selector:@selector(loopTask)
    userInfo:nil
    repeats:YES
];

timer1 = [
    NSTimer scheduledTimerWithTimeInterval:(1.0f/4.0f)
    target:self
    selector:@selector(isFree)
    userInfo:nil
    repeats:YES
];

Ich brauche etwas, das funktioniert wie NSTimer .

Was empfehlen Sie mir?

6voto

Behzad F94 Punkte 200
    new CountDownTimer(120000, 1000) {

        public void onTick(long millisUntilFinished) {
            txtcounter.setText(" " + millisUntilFinished / 1000);

        }

        public void onFinish() {

            txtcounter.setText(" TimeOut  ");
            Main2Activity.ShowPayment = false;
            EventBus.getDefault().post("go-main");

        }

    }.start();

2voto

Samir Punkte 5905

Hier habe ich einen Thread in onCreate() eine Activity wiederholt, Timer erlaubt nicht alles in manchen Fällen ist Thread die Lösung

     Thread t = new Thread() {
        @Override
        public void run() {
            while (!isInterrupted()) {
                try {
                    Thread.sleep(10000);  //1000ms = 1 sec
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {

                            SharedPreferences mPrefs = getSharedPreferences("sam", MODE_PRIVATE);
                            Gson gson = new Gson();
                            String json = mPrefs.getString("chat_list", "");
                            GelenMesajlar model = gson.fromJson(json, GelenMesajlar.class);
                            String sam = "";

                            ChatAdapter adapter = new ChatAdapter(Chat.this, model.getData());
                            listview.setAdapter(adapter);
                           // listview.setStackFromBottom(true);
                          //  Util.showMessage(Chat.this,"Merhabalar");
                        }
                    });

                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    };

    t.start();

Im Bedarfsfall kann es gestoppt werden durch

@Override
protected void onDestroy() {
    super.onDestroy();
    Thread.interrupted();
    //t.interrupted();
}

2voto

Osama Remlawi Punkte 1852

Ich mache es auf diese Weise und es funktioniert gut (der Code ist in Kotlin ):

private lateinit var runnable: Runnable

private var handler = Handler(Looper.getMainLooper())

private val repeatPeriod: Long = 10000

Rufen Sie dann die Runnable innerhalb Ihrer Funktion erneut auf

runnable = Runnable {

    // Your code goes here

    handler.postDelayed(runnable, repeatPeriod)

}

handler.postDelayed(runnable, repeatPeriod)

Beachten Sie, dass Sie, wenn Sie nicht postDelay das Doppelte Handler wird die Schleife nicht intakt sein!

1voto

Dominik Teroerde Punkte 181

En Kotlin können Sie auf diese Weise mit einem Runnable arbeiten:

private lateinit var runnable: Runnable
private var handler = Handler(Looper.getMainLooper())
private val interval: Long = 1000
private var isRunning = false

val runnable = object : Runnable {
    override fun run() {
        // Do something every second
        function()
        // Call your runnable again after interval
      handler?.postDelayed(runnable(this, interval))
    }
}

// Call your function once
if (!isRunning) {
    handler?.postDelayed(runnable, interval)
    isRunning = true
}

// Remove your repeatedly called function
if (isRunning) {
    handler?.removeCallbacks(runnable)
    isRunning = false
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X