Android,线程使用情况

时间:2011-12-19 23:30:17

标签: android multithreading exception

当加速度计数据超过我确定的阈值时,我的程序正在向Web服务器发送数据。所以,我使用线程机制进行发送操作:

if( threshold is exceeded )
    thread_send .start();

但是此用法导致“已使用线程”错误。所以我使用了一种我认为不好的方法,它的工作原理如下:

if( threshold is exceeded ) {
    thread_send = new Thread(this);
    send_thread.start();
}

每个回合都会创建新线程。这种用法会导致负面结果吗? (例如,内存问题或性能问题等)

你有什么建议?

编辑:

我的程序应该经常将数据发送到Web服务器。最重要的是工作正常。只要程序不能突然停止,慢速工作是允许的。

我根据你的建议使用了ExecutorService:

ExecutorService threadExecutor = Executors.newSingleThreadExecutor();

........    

if( threshold is exceeded ) {
   threadExecutor.execute(this);
}

但是发生了错误:RecejtedExecutionException .. enter image description here

我该怎么办?

2 个答案:

答案 0 :(得分:0)

第二个代码看起来是正确的,但如果太多线程并行运行,它可能会降低速度。根据应用程序的不同,使用Executors.newSingleThreadExecutor让线程在队列中一次一个地运行可能是合适的。

答案 1 :(得分:0)

一个想法是创建一个单独的服务来运行线程,如果一个没有运行,那么它会启动一个,否则它会忽略它。

如果你想同时多次运行,你所拥有的是正确的。请记住,每个新的Thread()

只能运行一次线程