android中线程之间通讯用啥方式,Android之用Handler实现主线程和子线程互相通信以及子线程和子线程之间的通信...

1、上代码

activity_main.xml文件

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:paddingBottom="@dimen/activity_vertical_margin"

android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

tools:context="com.example.handler.MainActivity" >

android:id="@+id/button1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="ParentToChile" />

android:layout_below="@+id/button1"

android:id="@+id/button2"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="ChileToParent" />

android:layout_below="@+id/button2"

android:id="@+id/button3"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="ChileToChile" />

MainActivity.java文件

package com.example.handler;

import android.os.Bundle;

import android.os.Handler;

import android.os.Looper;

import android.os.Message;

import android.support.v7.app.ActionBarActivity;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

public class MainActivity extends ActionBarActivity {

public static final String TAG = "HandlerTest";

public Button mButtonPtoC;

public Button mButtonCtoP;

public Button mButtonCtoC;

public Handler mHandlerCToP = new Handler(){

@Override

public void handleMessage(Message msg) {

super.handleMessage(msg);

switch(msg.what) {

case 0:

Log.d(TAG, "mHandlerCToP msg.what is 0");

break;

default:

break;

}

}

};

public Handler mHandlerPToc = null;

public Handler mHandlerCtoC = null;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mButtonPtoC = (Button)findViewById(R.id.button1);

mButtonCtoP = (Button)findViewById(R.id.button2);

mButtonCtoC = (Button)findViewById(R.id.button3);

startChileThread("mHandlerPToc");

startChileThread("mHandlerCtoC");

mButtonPtoC.setOnClickListener(new OnClickListener(){

@Override

public void onClick(View v) {

new Thread(new Runnable(){

@Override

public void run() {

mHandlerCToP.sendEmptyMessage(0);

}

}).start();

}

});

mButtonCtoP.setOnClickListener(new OnClickListener(){

@Override

public void onClick(View v) {

mHandlerPToc.sendEmptyMessage(0);

}

});

mButtonCtoC.setOnClickListener(new OnClickListener(){

@Override

public void onClick(View v) {

new Thread(new Runnable(){

@Override

public void run() {

mHandlerCtoC.sendEmptyMessage(0);

}

}).start();

}

});

}

//开启一根线程

public void startChileThread(final String type) {

new Thread(new Runnable(){

@Override

public void run() {

if (Looper.myLooper() == null) {

Log.d(TAG, "Looper.myLooper() is null");

Looper.prepare();

}

else {

Log.d(TAG, "Looper.myLooper() is not null");

}

if ("mHandlerPToc".equals(type)) {

mHandlerPToc = new Handler() {

@Override

public void handleMessage(Message msg) {

super.handleMessage(msg);

switch(msg.what) {

case 0:

Log.d(TAG, "mHandlerPToc msg.what is 0");

break;

default:

break;

}

}

};

} else if ("mHandlerCtoC".equals(type)) {

mHandlerCtoC = new Handler() {

@Override

public void handleMessage(Message msg) {

super.handleMessage(msg);

switch(msg.what) {

case 0:

Log.d(TAG, "mHandlerCtoC msg.what is 0");

break;

default:

break;

}

}

};

}

Looper.loop();

}

}).start();

}

}

3个按钮分别是子线程向主线程发消息、主线程向子线程发消息、子线程和子线程发消息

2、运行结果

0818b9ca8b590ca3270a3433284dd417.png

控制台打印

0818b9ca8b590ca3270a3433284dd417.png

3、总结

后面还会讲HandlerThread 实现子线程和子线程之间的通信,然后还有讲解Handler源码分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值