安卓之多线程
来源:互联网 发布:招淘宝客服是做什么的 编辑:程序博客网 时间:2024/05/16 10:12
一:基本用法:
①继承Thread
定义线程
class MyThread extends Thread { @Override public void run() { // 处理具体的逻辑 }}
执行
new MyThread().start();
②实现 Runnable 接口
定义线程
class MyThread implements Runnable {@Overridepublic void run() {// 处理具体的逻辑}
执行
MyThread myThread = new MyThread();new Thread(myThread).start();
③匿名类
new Thread(new Runnable() {@Overridepublic void run() {// 处理具体的逻辑}}).start();
二:子线程中更新UI
Android的UI也是线程不安全的。如果想要更新应用程序里的 UI元素,则必须在主线程中进行,否则就会出现异常。
例子:
public class MainActivity extends Activity implements OnClickListener { private TextView text; private Button changeText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); text = (TextView) findViewById(R.id.text); changeText = (Button) findViewById(R.id.change_text); changeText.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.change_text: new Thread(new Runnable() { @Override public void run() { text.setText("Nice to meet you"); } }).start(); break; default: break; } }}
上面代码是在子线程更新UI,会报错。下面是正确的写法,注意对比:
public class MainActivity extends Activity implements OnClickListener { public static final int UPDATE_TEXT = 1; private TextView text; private Button changeText; private 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; } } };........ @Override public void onClick(View v) { switch (v.getId()) { case R.id.change_text: new Thread(new Runnable() { @Override public void run() { Message message = new Message(); message.what = UPDATE_TEXT; handler.sendMessage(message); // 将Message 对象发送出去 } }).start(); break; default: break; } }}
上面这个方法被称为Android 异步消息处理,使用这种机制就可以出色地解决掉在子线程中更新 UI 的问题了。 其实,我们在子线程中对 UI进行操作,Android 还提供了另外一些好用的工具,AsyncTask 就是其中之一,很常用,一个常见例子就是在下载时更新UI显示下载进度。还有一个小问题:toast因为也是更新UI,所以也是不能直接放在子线程中的。
0 0
- 安卓之多线程
- 安卓学习之多线程
- 安卓之多线程下载
- 安卓之多线程请求数据
- 安卓开发之多线程编程教程
- 安卓学习笔记之多线程下载
- 安卓开发之多线程与异步任务
- 安卓开发之多线程断点下载(三)
- 安卓SharedPreference之多进程共享
- 安卓进阶之多击事件
- 安卓开发之多Fragment切换优化
- 【Android】安卓学习笔记之多线程、异步消息处理机制、使用AsyncTask在子线程中对UI 进行操作
- android线程之多线程
- 安卓线程问题
- 安卓线程问题
- 27安卓线程
- day28安卓线程
- 安卓终止线程
- 自定义相机及视频录制界面
- button没写type=button会导致点击时提交
- C51和ARM共存安装方法,uVision4版本
- git flow reset 3种详解
- ORA-12514的解决方法
- 安卓之多线程
- Spring 的简单理解
- WM_CONCAT
- 微信小程序 合法域名校验出错
- 关于转载内容的一个问题解析
- 一些数学英文书单
- golang开发缓存组件
- 【设计模式】之简单工厂模式
- Android透传root权限控制