2015-07-11 158 views
1

我想用多線程進行兩種不同的計算。我有一個AsyncTask,裏面有「doInBackground」函數。在這個函數中,我想要利用多核進行更多的計算。我試圖使用IntentService,但我不知道它是如何工作的。這是主要的活動代碼:如何進行多線程計算Android

@Override 
public String doInBackground(Void... params) { 
    long startTime = System.currentTimeMillis(); 
    Intent multi_pi = new Intent(
         getApplicationContext(), 
         multi_pi.class 
        ); 
    startActivity(multi_pi); 
    long endTime = System.currentTimeMillis(); 
    long total_time = endTime - startTime; 
    String time = Long.toString(total_time); 
    return time; 
} 

這是第一次計算的代碼:

public class multi_pi extends IntentService { 
    public multi_pi(String pi_1) { 
     super(pi_1); 
    } 

    @Override 
    protected void onHandleIntent(Intent pi_1) { 
    //first calculation 
    } 
} 

是否有另一種解決方案來做到這一點?

+0

爲什麼你需要IntentService?如果你想多線程計算,只需同時運行幾個AsyncTasks。 – AterLux

+0

小心AsyncTask,因爲它已知會導致內存泄漏 – mrroboaat

回答

0

首先你不能exploit multiple cores。只有系統決定是否使用一個或多個核心來解決特定的任務或任務。

但是,您可以給系統一個溫柔的提示,您需要同時執行多個任務:只需創建兩個或更多個線程。

new Thread(new Runnable() { 
    @Override public void run() { 
     //calculations #1 
    } 
}).start(); 
new Thread(new Runnable() { 
    @Override public void run() { 
     //calculations #2 
    } 
}).start(); 

就是這樣。

類如AsyncTask,IntentServiceService具有特定的目的。如果只需要運行兩個線程,則根本不需要使用AsyncTaskIntentService

+0

如果我想計算單線程執行的時間,然後將時間添加到總時間變量,該怎麼辦? – Northumber

+0

@Northumber所以有什麼問題? – eleven

+0

我想測量一次計算的執行時間直到他的結束,然後將時間加總到一個變量「總時間」 – Northumber