在開發(fā)中我們要實現(xiàn)程序使用,那么對于線程通信肯定不會不了解的,那么下面和大家分享有關(guān)于“android開發(fā)中實現(xiàn)線程通信有幾種方法?”這個問題的相關(guān)解決方法和實現(xiàn)方法!
1,通過Handler機制
主線程中定義Handler,子線程發(fā)消息,通知Handler完成UI更新,Handler對象必須定義在主線程中,如果是多個類直接互相調(diào)用,就不是很方便,需要傳遞content對象或通過接口調(diào)用。 另外Handler機制與Activity生命周期不一致的原因,容易導(dǎo)致內(nèi)存泄漏,不推薦使用。
private void one() {
handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case 123:
tv.setText(""+msg.obj);
break;
}
}
};
new Thread(){
@Override
public void run() {
super.run();
for (int i=0;i<3;i++){
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Message message=new Message();
message.what=123;
message.obj="通過Handler機制";
handler.sendMessage(message);
}
}.run();
}
2,runOnUiThread方法
private void two(){
new Thread(){
@Override
public void run() {
super.run();
for (int i=0;i<3;i++){
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
runOnUiThread(new Runnable() {
@Override
public void run() {
tv.setText("通過runOnUiThread方法");
}
});
}
}.run();
}
用Activity對象的runOnUiThread方法更新,在子線程中通過runOnUiThread()方法更新UI,強烈推薦使用。
3,View.post(Runnable r) 、
private void three(){
new Thread(){
@Override
public void run() {
super.run();
for (int i=0;i<3;i++){
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
tv.post(new Runnable() {
@Override
public void run() {
tv.setText("通過View.post(Runnable r) 方法");
}
});
}
}.run();
}
這種方法更簡單,但需要傳遞要更新的View過去,推薦使用
4,AsyncTask
private void four(){
new MyAsyncTask().execute("通過AsyncTask方法");
}
private class MyAsyncTask extends AsyncTask{
@Override
protected Object doInBackground(Object[] objects) {
for (int i=0;i<3;i++){
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return objects[0].toString();
}
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
tv.setText(o.toString());
}
}
在線程通信的使用我們在這篇文章中就可以了解到了,對于“android開發(fā)中實現(xiàn)線程通信有幾種方法?”這個問題的話我們也有了不少的了解,更多有關(guān)于android的使用和相關(guān)內(nèi)容我們都可以在W3Cschool中進行學(xué)習(xí)和了解!