【问题标题】:How to avoid running single application 2 times in dual core processor如何避免在双核处理器中运行单个应用程序 2 次
【发布时间】:2012-12-24 08:26:57
【问题描述】:

我创建了带有线程的小型应用程序,当我在单核中运行此应用程序时,它运行良好。

多核(双核)中的同一应用程序以不同的 PID 号运行两次。有无for循环,结果是一样的。

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

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

【问题讨论】:

  • 您要解决的实际问题是什么?
  • 需要避免在 2 核处理器设备(galaxy s3)中运行相同的应用程序两次。第一次运行没有问题,如果我第二次运行它会卡住(即相同的应用程序运行 2 次不同的使用 PS 命令检查 PID)
  • “卡住”是什么意思?究竟出了什么问题?

标签: android multithreading shell adb


【解决方案1】:

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

如果应用程序刚刚从冻结状态重新启动,Android 也会调用 onCreate() 方法。您需要找到一种方法来了解您的两个后台线程是否已经在运行,如果是,请不要再次启动它们。

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

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

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

【讨论】:

  • 从后台继续时,Android 不调用 OnResume,而不是 OnCreate?
  • 我确实观察到了 OnCreate 的一些调用,也获得了我保存的状态作为参数。也许这取决于清单中的生命周期配置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-19
相关资源
最近更新 更多