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);
}
}
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. –
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
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? –