對不起大家這已被問了幾次,但我只是不明白任何答案,因爲大多數是關於定時UI更新。所以我有一個backgroundTasks線程時我的應用程序第一次啓動時調用(有沒有網絡連接so..I認爲這是你如何做到這一點?)Android線程說明?
public class MainActivity extends ActionBarActivity {
String data[][];
int arrayPosition = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
runBackgroundTask();
}
這裏是我的線程..
public void runBackgroundTask(){
new Thread(new Runnable() {
public void run() {
data = pullSchedule(data);
updateUI(data,arrayPosition);
}
}).start();
}
它所做的就是調用一個方法pullSchedule,它使用webcrawler更新2D數組。所以我的問題出現在我調用updateUI方法的時候,這個方法也被兩個按鈕用來循環處理完美的數組數據。只是當線程第一次運行,如果我嘗試更新UI,我得到一個錯誤。
public void upDateUI(String data[][], int arrayPosition){
TextView gameTime =(TextView)findViewById(R.id.txtDate);
//more but deleted to save space :)
}
我研究了爲什麼我無法從後臺線程更新UI,但我不明白如何解決這個問題?我想將整個方法放入runOnUiThread(new Runnable()
,但後來我認爲我的數據和arrayPosition必須由於內部類而被聲明爲最終的。第一個Android應用程序剛剛丟失。謝謝你的幫助。
你看過AsyncTask嗎?它有一個名爲onPostExecute的回調方法,它允許您在後臺進程完成後更新UI。 http://developer.android.com/reference/android/os/AsyncTask.html – RichS
你可以在UI線程中創建'Handler'並在線程中使用'Handler.post(Runnable r)'。但最好的方法是使用AsyncTask – rdbmsa