Androidは4種類のスレッドでUIインタフェースを操作する方法をまとめた
2368 ワード
バックグラウンドスレッドでは、ネットワークからデータを取得するなど、時間のかかる操作を行うことがよくあります.しかし、データが取り戻され、ページに表示される必要がある場合、androidのUIページは他のスレッドで直接操作できないことを知っているため、いくつかの小さなトラブルに遭遇します.以下では、スレッド内でUIインタフェースを操作するための4つの方法をまとめる.
方法一:Handler
サブスレッドはHandlerのsendMessageを呼び出してイベントを送信する.
方法2:View.post(Runnable )
方法3:Activity.runOnUiThread(Runnable )
とview.post類似
方法四:AsyncTask
方法一:Handler
サブスレッドはHandlerのsendMessageを呼び出してイベントを送信する.
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
//
myText.setText( );
super.handleMessage(msg);
}
};
public class MyThread extends Thread {
public void run() {
//
loadNetWork();
Message msg = new Message();
mHandler.sendMessage(msg);// Handler ,
}
}
方法2:View.post(Runnable )
public void onClick( View v ) {
new Thread( new Runnable() {
public void run() {
//
loadNetWork();
myText.( new Runnable() {
myText.setText( );
});
}
}).start();
}
方法3:Activity.runOnUiThread(Runnable )
とview.post類似
public void onClick( View v ) {
new Thread( new Runnable() {
public void run() {
//
loadNetWork();
Activity.runOnUiThread.( new Runnable() {
myText.setText( );
});
}
}).start();
}
方法四:AsyncTask
//UI
new DownloadImageTask().execute( "www.91dota.com" );
private class LoadTask extends AsyncTask {
protected String doInBackground( String... url ) {
return loadDataFormNetwork( url[0] );//
}
protected void onPostExecute( String result ) {
myText.setText( result ); //
}
}