热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深入解析安卓四大组件之服务:多线程编程详解与应用

1.1)线程基本用法ClassMyThreadextendsThread{Publicvoidrun(){}}newMyThread().start();使用

1.1)线程基本用法

Class MyThread extends Thread{

      Public void run(){}

}

new MyThread().start();

使用继承耦合度比较高,更多选择使用实现Runnable接口的方式来定义一个线程

Class MyThread implements Runnable {

      Public void run(){}

}

MyThread myThread = new MyThread();

new Thread(myThread).start();

如果不想定义一个类去实现Runnable接口,也可以使用匿名类的方式

new Thread(new Runnable(){

    public void run(){//处理具体的逻辑}

}).start();

1.2)在子线程中更新UI
public class MainActivity extends AppCompatActivity implements View.OnClickListener {public static final int UPDATE_TEXT = 1;private TextView text;public Handler handler = new Handler() {public void handleMessage(Message msg){switch (msg.what){case UPDATE_TEXT://在这里进行UI操作text.setText("Nice to meet you");break;default:break;}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);text = (TextView) findViewById(R.id.text);Button changeText = (Button) findViewById(R.id.change_text);changeText.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch(v.getId()){case R.id.change_text:new Thread(new Runnable() {@Overridepublic void run() {Message message = new Message();message.what = UPDATE_TEXT;handler.sendMessage(message);//将message对象发送出去}}).start();break;default:break;}}
}

代码解析:安卓中的异步消息处理主要由四个部分组成:Message、Handler、MessageQueue和Looper.下面进行简要介绍:

1.Message 

Message是在线程之间传递消息,它可以在内部懈怠少量的信息,在不同线程之间交换数据。上述代码我们使用了Message的what字段,除此之外还可以使用arg1和arg2字段携带一些整形数据使用obj字段携带一个Object对象。

2、Handler

用于发送和处理消息。发送消息使用Handler的sendMessage()方法,发出的消息经过一系列的处理,最终会传递到Handler的handleMessage()方法中。

2、MessageQueue

MassageQueue是消息队列的意思,它主要用于存放所有通过Handler发送的消息。这部分消息会一直存在消息队列中,等待被处理。每一个线程中只会有一个Message对象。

3、Looper

每一个线程中的MassageQueue管家,调用Lopper的loop()方法后,九会进入到一个无限循环中,然后每当发现MassageQueue中存在一条消息,就会将它取出,并传递到handlerMessage方法中。每一个线程也只会有一个Looper对象。

最后总体流程如下(不懂的看代码)



推荐阅读
author-avatar
广大华软11级软测1班支部
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有