Android之ExecutorService线程池
2016-11-10 22:19
295 查看
为什么要引入线程池?
1.)new Thread()的缺点
每次new Thread()耗费性能
调用new Thread()创建的线程缺乏管理,被称为野线程,而且可以无限制创建,之间相互竞争,会导致过多占用系统资源导致系统瘫痪。
不利于扩展,比如如定时执行、定期执行、线程中断
2.)采用线程池的优点
重用存在的线程,减少对象创建、消亡的开销,性能佳
可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞
提供定时执行、定期执行、单线程、并发数控制等功能
public class GetTMKActivity extends AppCompatActivity { private TMKManager mTMKManager; private TextView log; private static long lastClick = 0; private ExecutorService executorService; private final Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case 0x1: if (log != null) { log.setText((String) msg.obj); } break; } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_get_tmk); log = (TextView) findViewById(R.id.result); LogUtil.isLogEnable(true); mTMKManager = new TMKManager(); mTMKManager.onCreate(this); executorService = Executors.newSingleThreadExecutor(); } @Override protected void onDestroy() { super.onDestroy(); mTMKManager.onDestroy(); if (executorService != null) { executorService.shutdownNow(); } } @Override protected void onPause() { super.onPause(); } @Override protected void onResume() { super.onResume(); mTMKManager.onResume(); } private boolean canClick() { if (System.currentTimeMillis() - lastClick > 500) { lastClick = System.currentTimeMillis(); return true; } Toast.makeText(GetTMKActivity.this, "click too fast", Toast.LENGTH_SHORT).show(); return false; } public void clickDo(View v) { if (!canClick()) { return; } switch (v.getId()) { case R.id.ic_getSerialNo: executorService.submit(new Runnable() { @Override public void run() { // 用过Handler的人都知道,Message有两种获取方法: // Message msg = new Message(); 或者 Message msg = handler.obtainMessage(); // 这两种方法的区别是,前者是new的,需要开辟内存空间;后者是从global Message pool中取,性能消耗相对少; Message.obtain(mHandler, 0x1, "serialNo:" + mTMKManager.getICKeyCardHelper().getSerialNo()).sendToTarget(); } }); break; case R.id.ic_getTMK: executorService.submit(new Runnable() { @Override public void run() { Message.obtain(mHandler, 0x1, "tmk:" + mTMKManager.getICKeyCardHelper().getTMK("7dsSJ2mk4LJBv4i9WaoUecjKYvavAHEU")).sendToTarget(); } }); break; case R.id.ic_getTMK2: executorService.submit(new Runnable() { @Override public void run() { Message.obtain(mHandler, 0x1, "Mkey:" + mTMKManager.getICKeyCardHelper().getTransKey()).sendToTarget(); } }); break;} }}
线程管理相关文章地址:
Android线程管理之Thread使用总结
Android线程管理之ExecutorService线程池
Android线程管理之ThreadPoolExecutor自定义线程池
Android线程管理之AsyncTask异步任务
Android线程管理之ThreadLocal理解及应用场景
相关文章推荐
- Android ExecutorService线程池
- Android Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式
- [Android实例] Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式
- Java&Android的线程池ExecutorService
- Android中线程池ExecutorService的使用
- Android ExecutorService线程池
- Java&Android的线程池---ExecutorService
- Android Handler ExecutorService(线程池) 缓存模式
- Android线程池:ExecutorService和Executors使用
- [Android实例] Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式
- [Android实例] Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式
- [Android实例] Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式
- java android ExecutorService 线程池解析
- Android(java)的线程池:ExecutorService和Executors简单介绍
- Android开发 Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式
- [Android实例] Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式
- Android(java)的线程池:ExecutorService和Executors简单介绍
- Android ExecutorService线程池
- [Android实例] Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式
- [Android实例] Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式