GeekBand--第八周分享
来源:互联网 发布:vb手机版下载 编辑:程序博客网 时间:2024/05/16 08:33
代码的重构
代码的简洁清晰明了非常的重要!代码重构要注意以下几点
1.把一些独立的方法分离出来,重构成一个类,是代码简洁并且容易使用
2.把一些注释了的没有的代码都删除了
3.记住封装的特性!这样才能使程序更有扩展性!
多线程的概念
多线程能帮助我们提高效率,可以并行多个任务,就像多个流水线工作!
主线程就是UI线程
工作线程就是你new出来的一个线程
线程安全
就是当线程之间进行资源竞争的时候可能产生线程不安全事故!所以需要加锁!
用以下这些方法可以在异步线程中更新主线程的东西!
// Worker 线程 new Thread(new Runnable() { @Override public void run() { // 第一种 runOnUiThread(new Runnable() { @Override public void run() { mTextView.setText("我在其它线程中千辛万苦来看你……"); } }); // 第二种 mTextView.post(new Runnable() { @Override public void run() { mTextView.setText("我在其它线程中千辛万苦来看你……"); } }) ; // 第三种 mTextView.postDelayed(new Runnable() { @Override public void run() { mTextView.setText("我在其它线程中千辛万苦来看你……"); } },1000); // 第四种 new Handler(Looper.getMainLooper()).post(new Runnable() { @Override public void run() { mTextView.setText("我在其它线程中千辛万苦来看你……"); } }); } }).start();
也可以用AsynTaskL来处理
class TestTask extends AsyncTask<Integer,Integer,String>{ @Override protected void onPreExecute() { // main thread ,before doInBackground(); mTextView.setText("加载中"); super.onPreExecute(); } @Override protected String doInBackground(Integer... params) { // worker thread // download parse xml data return String.valueOf(params[0] * 2 + 2); } @Override protected void onPostExecute(String result) { super.onPostExecute(result); // main thread ,after doInBackground(); mTextView.setText("加载完成, 结果是:" + result); }}
new Thread()与ThreadPoolExecutor的对比
New Thread()的弊端
- 每次new Thread的新建对象性能差
- 线程缺乏统一的管理,可能无限制新建线程,相互之间竞争,及可能占用过多系统资源导致死机或oom
- 缺乏更多功能,如定时执行、定期执行、线程中断。
ThreadPoolExecutor
- 提升性能。创建和小号对象费时费CPU资源
- 防止内存过度小号。控制活动线程的数量,防止并发线程过多
线程池
主要有以下线程池
1.newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
2.newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
3.newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
4.newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
也可以通过handler处理主线程与异步线程的交互
// update UI 在异步线程中发送消息 Message message = mHandler.obtainMessage(); message.obj = progress; message.what = 0; mHandler.sendMessage(message); //主线程中处理 @Override public void handleMessage(Message msg) { super.handleMessage(msg); MainActivity activity = mActivity.get(); switch (msg.what) { case 0: int progress = (int) msg.obj; activity.getProgressBar().setProgress(progress); activity.getTextView().setText("进度:" + progress + "%"); if(progress == 100){ Toast.makeText(activity, "download success", Toast.LENGTH_SHORT).show(); } break; }}
0 0
- GeekBand--第八周分享
- geekband android #5 第八周分享(多线程)
- GeekBand第八周笔记
- GeekBand--第二周分享
- GeekBand--第三周分享
- GeekBand--第五周分享
- GeekBand--第六周分享
- GeekBand--第七周分享
- GeekBand--第九周分享
- geekband android #5 第十五周分享
- GeekBand C++ C++设计模式 第八周笔记
- GeekBand--第一周分享
- GeekBand-第一周分享
- GeekBand--第四周分享
- geekband android #5 第九周分享(多进程)
- geekband android #5 第十周分享(传感器)
- geekband android #5 第十三周分享(Btimap优化)
- geekband android #5 第二周分享(布局、ListView)
- 第九周实践-阅读程序写出程序运行结果并理解(2)
- Lock-Free
- 红黑树
- Hadoop2.x的解析和Yarn模块解析
- 贪心算法实例 单源最短路径 Dijkstra算法(c++实现)
- GeekBand--第八周分享
- Linux下rz,sz与ssh的配合使用
- innerHTML VS createElement
- Android xml资源文件中@、@android:type、@*、?、@+含义和区别
- 2016.04.23 吾日三省吾身
- 32位的整型数拆分为两个浮点数的方法
- 算法:动态规划
- 第九周实践-阅读程序写出运行结果并理解(3)
- PEP8 Python 编码规范整理