我的疑问是关于如何在另一个线程的服务中的API中运行一段代码。在单独的线程上运行一段代码
我在我的服务中有一个API函数。只有这个API代码的一部分是独立的(2-3 LOC),我想将它移动到单独的线程中,因为这些代码占用了大量的时间,并且这些代码行对UI线程没有影响。这就是我所做的。
原代码:
func(){
subA();
subB();
subC();
}
修改后的代码:
Thread mThread = null;
func(){
subA();
if(mThread == null){
mThread = new Thread(){
public void run(){
subB();
subC();
}
}
}
mThread.start();
}
在运行这段代码,我得到一个例外“线程已经开始”。
我没有读过关于这个的SO,已经启动的线程不能再次重新启动。我需要再次创建一个新线程并启动它。但是我不想每次都创建一个新的线程对象,因为这会导致UI线程的性能问题。有没有其他办法可以处理。
我发现了一些其他的方式来达到这个在android,如Handler,HandlerThread,AsyncTask等,但我不能解决我的想法是最好在这里使用(我不想创建新的对象每次(thread/asynctask/handler/handlerthread
),只需要创建线程对象一次,并重新使用它每次)。
如果有人曾经在此领域工作过,请帮忙!
您最好使用异步任务或处理程序。从长远来看,你会遇到许多问题,这些构造已经被制定出来并且培养你自己的解决方案也是需要创造的更多工作。只有在你想学习的时候才去做线程。 – allprog
@allprog你可以看看我自己的答案。任何评论,我可以避免每次创建新的可运行对象(我现在正在这样做,因为我需要每次将新的参数传递给subB()和subC()。我认为只创建一次可运行对象会创建一个问题。) – superuser