2016-07-27 26 views
0

Experten,Wie bekomme ich die neue Thread-Info für onCreate() und behalte Thread-Sicherheit?

Ich habe einen sehr langen Code innerhalb onCrate() in einer Aktivität. Am Anfang des langen Codes muss ich beurteilen, ob das Netz schlecht ist, wenn ja, zurückgeben und den verbleibenden Code überspringen.

Ich verstehe, dass ich das Netz in UI-Thread nicht beurteilen kann, so muss ich AsyncTask oder Handler & Runnable verwenden.

Aber alles Tutorial, das ich gelernt habe, ist das net schlecht oder ok Status in einem neuen Thread und pass auf onPostExecute (AsyncTask) oder HandleMessage (Handler), dann UI aktualisieren oder etwas in OnPostExecute (AsyncTask) oder HandleMessage (Handler) , denn sie sind im UI-Thread.

Oben ist nicht das, was ich brauche, was ich brauche, ist das Netz schlecht oder ok Info onCreate() -Methode bringen, so kann ich wissen, ob ich den restlichen Code in onCreate() oder nicht weiter laufen soll.

(Man beachte, dass vor onCreate() bekam net Infos von neuen Thread (braucht Zeit), müssen die verbleibenden Code vermeiden execute)

Aber ich weiß nicht, wie zu tun? Könnten Sie bitte helfen? Danke im Voraus.

(Auch wenn ich param innerhalb onCreate(), um den neuen Runnable übergeben müssen, wie zu tun?)

Mein Code:

public class MainActivity extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     if net is bad then return; 

     // more than 1 thousand other codes... 

    } 
} 

Handler Beispiel:

public class MainActivity extends Activity { 

Handler handler = new Handler() { 

    @Override 
    public void handleMessage(Message msg) { 
     switch (msg.num) { 
      case 1: show net is ok in a UI textview 
      case 2: show net is bad 
      (but how to pass the msg.num to inside onCreate()?) 
     } 
    } 
}; 

Runnable newTread = new Runnable() { 
    @Override 
    public void run() { 
     // judge net statements 
     msg.obj = num; 
     handler.sendMessage(msg); 
    } 

}; 

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

} 
+0

Vielleicht sollten Sie Internet in onResume() Methode überprüfen, und Dinge zu tun, danach. Sie sagten, Sie kehren onCreate wenn Fall 2, vielleicht sollten Sie diese verwenden .finish() in case2. –

+0

richtig, aber was ich interessanter bin, ist die Kommunikation zwischen onCreate() und neuen Thread. Der Code ist nur ein Beispiel, ich brauche möglicherweise viele andere Informationen, andere Beurteilung zwischen ihnen in der realen Codierung. – caibirdcnb

+0

Wenn Sie diese Aktivität nur nach all dem Urteil beenden wollen, denke ich, dass es vielleicht einen Weg gibt, dies zu erreichen. Aber wenn du mehr willst als nur zu beenden, habe ich Angst, weil onCreate deiner Meinung nach auf das Urteil warten muss. Bedeutet das nicht, dass sie im "gleichen" Thread sind? –

Antwort

0

Ich muss sagen, ich persönlich denke, dass meine Frage typisch und nützlich ist, aber keine Antwort.

Ich glaube auch, dass ich meine Frage klar genug poste.

Nach ein paar Tagen Studie, fand ich Callable-Schnittstelle sollte die richtige Antwort sein, kann ich einen booleschen Rückgabewert definieren, um für den Netto-Status zu sprechen, auch die get() -Methode Thread-sicher.

Allerdings suche ich die gesamten Google und Android APIs, kann kein Callable Beispiel für Android finden.

Ich kann wirklich nicht verstehen, warum diese Frage kalt behandelt ...