2015-07-11 119 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