我的疑問是關於如何在另一個線程的服務中的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