2013-06-14 7 views
6

Ich habe Suche, wie ich eine "Auto Refresh" oder eine ausführbare Methode für mein Programm tun kann, sah ich einige Beiträge über Handler und Threads ... Ich denke, dass was ich Suche aus ist ein Thread, aber ich kann das Programm arbeiten ... Lassen Sie mich Ihnen einen Code erhalten:Android: "Auto Refresh" nach einer bestimmten Zeit

refresh.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      getUrlText(); 
      if (time.getText().toString().equals("") 
        || time.getText().toString().equals("0")) { 
       mins = 0; 
      } else { 

       mins = Integer.parseInt(time.getText().toString()); 
       setTimer(mins); 
       t.start(); 


      } 

     } 

     private void setTimer(int mins) { 
      miliSecTime = mins * 60 * 1000; 

     } 
    }); 

    t= new Thread() { 
     @Override 
     public void run() { 
      long start = System.currentTimeMillis(); 

      while (true) { 
       long time = System.currentTimeMillis() - start; 
       int seconds = (int) (time/1000); 
       if (seconds > miliSecTime) { 
        getUrlText(); 
        start = System.currentTimeMillis(); 

       } 
      } 
     } 
    }; 
} 

Also, dieser Teil des Codes sollte eine Nummer aus dem Benutzer und dann ausführen getUrlText() ; alle x Minuten, wobei x ist die Zahl, die Benutzereingabe ... Mein Problem sollte im Lauf sein, aber ich kann nicht herausfinden, was ist ... Vielen Dank im Voraus für die Hilfe :)

+0

Für so etwas wäre es besser mit http://developer.android.com/reference/android/app/AlarmManager.html. – 323go

Antwort

8

Hier ist eine Möglichkeit, es zu tun.

erklären diese in Ihrer Aktivität:

Handler handler = new Handler(); 
Runnable timedTask = new Runnable(){ 

    @Override 
    public void run() { 
     getUrlText(); 
     handler.postDelayed(timedTask, 1000); 
    }}; 

setzen Sie dann Ihre onClick:

button.setOnClickListener(new OnClickListener() { 

    @Override 
     public void onClick(View v) { 
      getUrlText(); 
      handler.post(timedTask); 
     } 
    }); 

Diese timedTask alle 1000 Millisekunden ausgeführt wird. Erhöhen Sie diese Anzahl bei Bedarf.

Ich bin mir nicht sicher, was Sie mit mins und so weiter tun, aber setzen Sie alle Ihre Logik, die regelmäßig in die timedTaskRunnable ausgeführt werden muss. Hoffnung, die Sinn macht.

2

1. erstellen Handler

Handler handler = new Handler(); 

2. Erstellen Sie Runnable Objekt

public final Runnable runnable = new Runnable() { 

    @Override 
    public void run() { 
     // your code while refreshing activity 
    } 
}; 

3. Call-Methode von Handler Object

handler.postDelayed(runnable, 3000); 

// 3000 ist die Zeit in Millisekunden

// diese Methode in onCreate() setzen

// onResume() oder Wo erfrischende Ort

5

Sie diesen Code für von Auto-Refresh implementiert verwenden können deiner Tätigkeit für bestimmte Zeiten wie unten.

Zuerst können Sie den Namensraum der Kopfzeile wie folgt verwenden.

import android.os.Handler; 

Nach neuer Instanz von Handler erstellen.

private final Handler handler = new Handler(); 

Dann ein ein Verfahren zum Auffrischen schreiben, wie unten und in OnCreate Methode Umfang nennen, hier i 5000 Millisekunden oder 5 Sekunden verwendet habe. Sie können wie gewünscht ändern.

private void doTheAutoRefresh() { 
    handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      // Write code for your refresh logic 
      doTheAutoRefresh(); 
     } 
    }, 5000); 
} 

Abschlusscode für Put-Methode der automatischen Aktualisierung wie unten.

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

    doTheAutoRefresh(); 
}