如何避免在双核处理器中运行单个应用程序2次

时间:2012-12-24 08:26:58

标签: android multithreading shell adb

我使用线程创建了一个小应用程序,当我在单核中运行这个应用程序时,它运行得很好。

在使用不同PID编号运行两次的多核(双核)中的相同应用。有和没有for循环,结果是一样的。

请帮助如何避免两次运行应用程序。 这是一段代码

for (int i = 0; i < System.Environment.ProcessorCount; i++)
{
    Thread thCurrent = new Thread(sampleMethod);                        
     thCurrent.Start();
     thSubThreads.Add(thCurrent);
} 

1 个答案:

答案 0 :(得分:0)

我假设您需要在主活动开始时启动的两个线程,但是当程序挂起时线程也会继续运行,并且每次程序从后台恢复时都会无意中启动另外两个线程。

如果应用程序刚刚从冻结状态重新启动,那么

Android也会调用onCreate()方法。你需要知道你的两个背景线程是否已经在运行,并且如果是这样的话,你不需要第二次启动它们。

跟踪这些已启动进程的一种可能方法是将创建的线程分配给主活动中的静态字段。在创建时,您应该能够检查线程字段是否为空并且线程是否处于活动状态。

onCreate接受一个参数(bundle),您可以在其中查找存储状态。但是,如果应用程序已被真正挂起并卸载了类,那么您的两个线程可能不会被停止(除非在这种情况下它可能不会?)。因此,我不确定在此捆绑中存储“线程已经启动”等布尔值是否合适,以后再依赖它们。

更好的方法是在onStop()上停止这些线程并在onStart()上启动它们。