921 Stimmen

Wie man eine Methode nach einer Verzögerung in Android aufruft

Ich möchte in der Lage sein, die folgende Methode nach einer bestimmten Verzögerung aufzurufen. In Objective C gab es etwas wie:

[self performSelector:@selector(DoSomething) withObject:nil afterDelay:5];

Gibt es ein Äquivalent zu dieser Methode in Android mit Java? Ich muss zum Beispiel in der Lage sein, eine Methode nach 5 Sekunden aufzurufen.

public void DoSomething()
{
     //do something here
}

4voto

Supto Punkte 984

Wenn Sie RxAndroid verwenden, wird die Thread- und Fehlerbehandlung viel einfacher. Der folgende Code wird nach einer Verzögerung ausgeführt

Observable.timer(delay, TimeUnit.SECONDS)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(aLong -> {
            // Execute code here
        }, Throwable::printStackTrace);

3voto

HelmiB Punkte 12185

Ich habe eine einfachere Methode entwickelt, um dies aufzurufen.

public static void CallWithDelay(long miliseconds, final Activity activity, final String methodName)
    {
        new Handler().postDelayed(new Runnable() {

            @Override
            public void run() {
                try {
                    Method method =  activity.getClass().getMethod(methodName);
                    method.invoke(activity);
                } catch (NoSuchMethodException e) {
                    e.printStackTrace();
                } catch (InvocationTargetException e) {
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
            }
        }, miliseconds);
    }

Um sie zu verwenden, rufen Sie einfach : .CallWithDelay(5000, this, "DoSomething");

3voto

Sazzad Hissain Khan Punkte 33230

Unten funktioniert man, wenn man es bekommt,

java.lang.RuntimeException: Kann keinen Handler innerhalb eines Threads erstellen, der nicht Looper.prepare() aufgerufen hat

final Handler handler = new Handler(Looper.getMainLooper());
handler.postDelayed(new Runnable() {
  @Override
  public void run() {
    //Do something after 100ms
  }
}, 100);

2voto

Thiago Punkte 11191

Ich mag es sauberer: Hier ist meine Implementierung, Inline-Code zur Verwendung innerhalb Ihrer Methode

new Handler().postDelayed(new Runnable() {
  @Override
  public void run() {
    //Do something after 100ms
  }
}, 100);

2voto

norbDEV Punkte 4167
  • Kotlin
  • runOnUiThread aus einem Fragment
  • Zeitschaltuhr

Beispiel:

Timer().schedule(500) {
    activity?.runOnUiThread {
        // code                                    
    }
}

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