我的Android代码中有一个事件处理机制,用于将传感器值转储到文件中。现在,我在主UI线程中执行它,因此UI按钮的响应速度非常缓慢,我想加快速度。如何在Android中使用多线程处理事件处理函数(SensorListeners)
如何在事件处理函数上使用多线程?我试图这样做:
- 创建一个全局变量writeNow。
- 当传感器值变化,设置WriteNow =真
在类中创建一个螺纹,其看起来像这样:
Thread thread1 = new Thread() { public void run() { if(writeNow == true) { try { fos.write(s.getBytes()); } catch (IOException e) { e.printStackTrace(); } writeNow = false; } } };
因此,每当writeNow是真实的,是将数据写入一个文件,然后将WriteNow设置为false。但是,我意识到这不是正确的方法,因为线程将执行一次,然后停止执行。当我用一段时间(true)和wait()尝试一个简单的例子时,我发现线程被中断了数百万次。
那么,如何将这个事件处理机制放在一个线程中,以加速进程呢?
谢谢!
为什么我睡了100ms的?为什么不保持一段时间(真的)一直在运行?我实际上试过这段代码,但UI响应性根本没有改善...... – Imelza 2011-03-09 06:09:26
如果你的线程没有“睡眠”(并且它不一定是100毫秒,这取决于你的应用程序),它不是给其他线程一个运行的机会 - 并且如果它是唯一占用所有系统资源的线程,那么您将在设备上看到一般的迟缓,因为UI线程和其他线程无法获得足够的CPU时间。看看[忙碌的等待](https://secure.wikimedia.org/wikipedia/en/wiki/Busy_waiting)。 – 2011-03-09 14:48:46
您是否尝试了方法#1或#3? wait/notify'是消费者生产者问题的常用方法 - 请参阅我链接的教程。 #1中的代码非常完整,您只需将您的写入登录名移动到那里的'run()'方法中即可。如果这仍然没有帮助,那么你的问题在别处。 – 2011-03-09 14:51:22