Android中如何解决Thread is already started问题
2016-07-03 16:15
501 查看
虽然我们都知道开启多线程有两种方式,但在实际应用仍不免遇到这样那样的问题,其中Thread is already started是遇到的问题最多的,这个问题主要是由于在开启线程执行任务是,多线程多次start。解决方案就是开启一个线程池,将任务放在线程池中执行,主要有两种方式开启线程池,下面是我在练习项目中开启线程执行任务时遇到的问题及解决具体解决方法。
问题产生
上面的一段代码会报Thread is already started错误,解决方法有三种
第一种
不过这样的牺牲就是有线程在无限循环,性能大大的降低!
第二种
启动的时候用下面方式启动
第三种
启动的时候用下面的方式
上面解决问题的三种方式,android中推荐使用方式二来解决多线程Thread is already started问题。
问题产生
Thread mythread = new Thread(new Runnable() { @Override public void run() { doTask(); } }).start(); private void doTask() { int temp = 0; while (temp < points.size()) { Message message = new Message(); message.what = 1; message.obj = points.get(temp); temp++; handler.sendMessage(message); try { Thread.sleep(1000); while (pauseFlag) { Thread.sleep(20);// 通过控制不停休眠达到暂停效果 } } catch (InterruptedException e) { e.printStackTrace(); } } }
上面的一段代码会报Thread is already started错误,解决方法有三种
第一种
Thread myThread = new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub while (true) { if (runable) { count++; try { Thread.sleep(100); } catch (Exception e) { e.printStackTrace(); } doTask(); } } } }).start();
不过这样的牺牲就是有线程在无限循环,性能大大的降低!
第二种
private class MyDrawThread implements Runnable { @Override public void run() { doTask(); }
启动的时候用下面方式启动
new Thread(new MyDrawThread()).start();
第三种
private class MyThread extends Thread{ @Override public void run() { // TODO Auto-generated method stub super.run(); doTask(); } }
启动的时候用下面的方式
MyThread myThread = new MyThread(); myThread.start();
上面解决问题的三种方式,android中推荐使用方式二来解决多线程Thread is already started问题。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories