Android(安卓)-HandleThread-给线程传参数
16lz
2021-01-24
最近看看了线程,有点乱,下面是个例子,我自己的理解是这样的:
1、实现了给线程传递参数;
2、实现了多线程;
如有不对请指点;
DEMO:http://download.csdn.net/detail/small5e4444/9058185
代码:
public class MainActivity extends Activity {
MyThread StartThread;private Handler handlerThread; int comRestart=0; int comJoin=0;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /** * 开启一个线程 */ StartThread = new MyThread(); StartThread.start();}/** * MyThread * @author Administrator * */class MyThread extends Thread { public void run() { System.out.println("线程启动"); //建立消息循环的步骤 Looper.prepare();//1、初始化Looper handlerThread = new Handler(){//2、绑定handler到CustomThread实例的Looper对象 public void handleMessage (Message msg) {//3、定义处理消息的方法 switch(msg.what) { case 3://重启 System.out.println("线程收到A的数据--comRestart:"+comRestart); try { Thread.sleep(1000);//线程先等待1s,看是否收到了返回值; } catch (InterruptedException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } while(comRestart<4){//连续执行之前的操作3次 if(comRestart==3){//三次发送都失败啦 /** * 处理数据 */ System.out.println("case 3命令--连续3次错误"); }else{ try { /** * 线程等待1s的目的是,等待我发送命令后的返回值,如果1秒内收到返回值,那么就停掉这个线程 * 如果1s内没有收到返回值,在这个线程里,连续发送3次之前的命令; * Demo,用System.out代替了命令 */ Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("comRestart没有收到正确数据,测试发送三次,第"+comRestart+"次"); //原来放了个自定义 发送命令的方法,发送命令 myRestart(); System.out.println("comRestart从新发送第"+comRestart+"次"); } comRestart++; } break; case 4://允许加入 System.out.println("线程收到A的数据--comJoin:"+comJoin); try { Thread.sleep(1000);//线程先等待1s,看是否收到了返回值; } catch (InterruptedException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } while(comJoin<4){ if(comJoin==3){//三次发送都失败啦 }else{ try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("comJoin没有收到正确数据,测试发送三次,第"+comJoin+"次"); myjoin();//调用 System.out.println("comJoin从新发送第"+comJoin+"次"); } comJoin++; } break; } } }; Looper.loop();//4、启动消息循环 }}public void restart(View v){ myRestart(); //System.out.println("发送第一次命令:RESTART"); /** * 开启一个线程 判断3秒钟之内是否能收到返回值 */ comRestart=0; handlerThread.obtainMessage(3, "restart").sendToTarget();//发送消息到Thread实例}public void tojoin(View v){ myjoin();//调用 /** * 开启一个线程 判断3秒钟之内是否能收到返回值 * 给线程传参数 */ comJoin=0; handlerThread.obtainMessage(4, "comJoin").sendToTarget();//发送消息到Thread实例}private void myjoin(){ System.out.println("fsd-----发送命令:join");}private void myRestart(){ System.out.println("fsd-----发送命令:restart");}
}
更多相关文章
- 6.2、Android中向Internet发送xml数据
- Android(安卓)添加程序到桌面favorites列表
- Android(安卓)4.4以上使用HttpURLConnection底层使用OkHttp实现
- Android(安卓)Screen Monitor抓取真机屏幕
- Android(安卓)常见的几种加密方式RSA、CBC的集成
- android 百度地图定位功能实现
- android线程间通信和主线程更新ui
- Android中使用OrmLite来对SQLite数据库进行CRUD(增删改查)解析
- Android下的JNI创建多线程的方法