2017-07-19 2 views
0

Ich möchte wissen, welche Methode ständig ruft, wenn Fragment läuft? Ist es onResume(). Ich habe eine Bedingung (if-Anweisung), ich möchte, dass das Fragment ständig überprüft die Bedingung und wenn es wahr ist, die folgende Aufgabe, die ich tun möchte. Zum Beispiel:Android - Welche Fragmentmethode ruft ständig auf, wenn das Fragment läuft?

 if (heartdata >= 100 || bloodata >= 120 || tempdata >= 100) 
    { 
     sendMessage(); 
    } 

Wo lese ich diese Aussage IF setzen sollte, so dass das Android-Fragment/app ständig den Zustand und rufen Sie die nachrichtsprüft(); i setzen Sie den Code in onCreate() es auch nicht gearbeitet habe ich setzte, dass in onCreateView(), aber bitte sagen Sie mir nicht gearbeitet, wo diesen Code zu setzen ..

+0

Sie diese Aufgabe nicht auf mainUi Thread tun sollten – Shivam

+0

wo dann diesen Code setzen? –

Antwort

0

Die Lösung einen TimerTask und Zeitplan zu verwenden ist es in regelmäßigen Abständen mit Timer, weil Fragment Lebenszyklus Methoden werden nicht wiederholt aufgerufen, während fragment ist stabil und läuft. Fügen Sie unter Code in onViewCreated Methode Ihrer fragment

Beispiel

 Timer timer = new Timer(); //Global declaration 
    public void onViewCreated(..){ 
    ... 
     timer.schedule(new TimerTask() { 
       @Override 
       public void run() { 
        if (heartdata >= 100 || bloodata >= 120 || tempdata >= 100) 
         { 
         sendMessage(); 
         } 
       } 
      },60 * 1000); // Which will run for every 60 seconds 
     ... 
     } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     timer.cancel(); 
    } 
+0

Vielen Dank Mann Sie haben meinen Tag gerettet –

+0

Mein Vergnügen :) Ich bin froh, dass ich helfen konnte! –

+0

Würdest du mir bitte sagen, wie man den Timer-Task-Thread stoppt, wenn das Fragment zerstört oder unscharf ist? –

0

Sie können sehen, die Fragment Lebenszyklus here. Grundsätzlich gibt es keine Methode, die "ständig überprüft". Zum Beispiel wird die Methode onResume() nur aufgerufen, wenn ein Fragment wieder aufgenommen wird.

Wenn Sie ständig überprüfen möchten, ob eine Bedingung erfüllt ist, würde ich vorschlagen, einen Hintergrund-Thread zu erstellen und den oben angegebenen Code innerhalb dieses Threads auszuführen. Sobald die Bedingung erfüllt ist, senden Sie Ihre Nachricht.

+0

bitte geben Sie mir Beispielcode, damit ich es leicht verstehen kann –

+0

Überprüfen Sie dies: https://developer.android.com/training/multiple-threads/define-runnable.html nur Ihre Logik dort. – Ivan

+0

Vielen Dank für Ihre Hilfe –

0

einen boolean erstellen isRunning namens In onResume gesetzt isRunning auf true und in setzen Sie ihn auf false. Oder verwenden Sie onStart und inStop, die Sie wollen.

und dann während Aussage: while(isRunning) und do was auch immer Sie es wollen ...

aber ich nicht wirklich sicher bin, ob diese

PS für die Leistung gut ist: Verwenden Sie while oder vielleicht for, wenn Sie will aciton wiederholt tun .. nicht if ... if ist eine Art der Überprüfung

0

Ich denke für diesen Zweck sollten Sie einen neuen Thread verwenden, in dem Sie ständig überprüfen, dass c ondition und wenn diese Bedingung erreicht ist, geben Sie einen Rückruf an das Fragment zurück.

+0

Bitte geben Sie mir Beispielcode –

0

diesen Code Versuchen Sie, es wird jeder überprüfen 1SEC

public class MyFrag extends Fragment { 
    Runnable runnable = new Runnable() { 
     @Override 
     public void run() { 
      if(getActivity()!=null) { 
       mHandler.postDelayed(runnable, 1000); 
      }else{ 
       mHandler.removeCallbacks(runnable); 
       return; 
      } 
      //Your check code will here 
     } 
    }; 
    Handler mHandler = new Handler(); 
    @Override 
    public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     mHandler.postDelayed(runnable,1000); 
    } 
} 
Verwandte Themen