Android開之在非UI線程中更新UI,androidui
當在非UI線程中更新UI(程式介面)時會出現如所示的異常:
那如何才能在非UI線程中更細UI呢?
方法有很多種,在這裡主要介紹兩種:
第一種:在需要更新UI的程式碼後加Looper.prepare();與Looper.loop();兩句話即可。如:
new Thread(){@Overridepublic void run() {// TODO Auto-generated method stubtxtRotation.setText("在非UI線程中更新UI!");Looper.prepare();Looper.loop();}}.start();
第二種:使用如下方法:
new Thread(){@Overridepublic void run() {// TODO Auto-generated method stubshowToastByRunnable(MainActivity.this, "", 3000);}}.start();
/** * 在非UI線程中使用Toast * @param context 上下文 * @param text 用以顯示的訊息內容 * @param duration 訊息顯示的時間 * */private void showToastByRunnable(final Context context, final CharSequence text, final int duration) { Handler handler = new Handler(Looper.getMainLooper()); handler.post(new Runnable() { @Override public void run() { Toast.makeText(context, text, duration).show(); } });}
怎在android一條單獨線程,更新ui ?
android中非UI線程是不能對UI進行操作的,你可以在單獨線程執行耗時操作,然後通過Handler去更新UI。或者你可以使用AsyncTask。
android開發非UI線程與UI線程不同詳解,回答專業知識
UI線程,即主線程,在主線程裡不能進行耗時的操作,不然系統會彈出ANR提示框,所以一般的耗時操作都是放到非UI線程裡去完成,即子線程。目前在開發層面的區別應該主要是這個吧,其它的暫時沒聽說。