android中多线程浅析
2011-03-11 19:21 雪夜&流星 阅读(773) 评论(5) 编辑 收藏 举报最近在做android项目的时候经常要用到比较耗时的操作,一但操作的时间过长,比如超过一分钟那么就会造成UI阻塞,界面假设的状况。那么我们就要用到多线程,其实多线程原理很简单,每个Activity可以算作是一个进程,进程里面有一个主线程在运行,那么我们只需要在主线程中开一个子线程将那些耗时长的操作丢进去就可以了。在这里如果直接在子线程中的操作完成了之后就更新UI,那么就抛出异常,原因在于不能直接在子线程中对主线程UI操作。我们可以操作的是发送一个消息给主线程,让主线程来更新UI。这中间涉及到了一个消息机制,就要用到android自带的Handle机制。下面这个是最简单的例子:
以我们经常接触到的下载为例子,开始的时候用一个用一个textview显示准备下载,下载的时候显示下载中,下载完成之后显示下载完成三种不同状态。
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textView=(TextView) findViewById(R.id.tv);
checkUpdate.start();
textView.setText("准备下载...");
}
//实例化Handler
private Handler mHandler =new Handler() {
//接收子线程发来的消息,同时更新UI
publicvoid handleMessage(Message msg) {
textView.setText("歌词下载完成。");
}
};
//实例化新的线程
private Thread checkUpdate =new Thread() {
@Override
publicvoid run() {
Looper.prepare();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//向主线程发送消息
mHandler.sendMessage(mHandler.obtainMessage());
}
};
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textView=(TextView) findViewById(R.id.tv);
checkUpdate.start();
textView.setText("准备下载...");
}
//实例化Handler
private Handler mHandler =new Handler() {
//接收子线程发来的消息,同时更新UI
publicvoid handleMessage(Message msg) {
textView.setText("歌词下载完成。");
}
};
//实例化新的线程
private Thread checkUpdate =new Thread() {
@Override
publicvoid run() {
Looper.prepare();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//向主线程发送消息
mHandler.sendMessage(mHandler.obtainMessage());
}
};
还要注意的是异步提交的时候开了线程也是无效的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本