2012-09-25 27 views
0

我正在开发一个应用程序。在这我写了下面的代码获取后台运行applicaiton的列表。我怎样才能得到所有正在运行的应用程序信息

- (NSArray *)runningProcesses { 
@try { 
int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_ALL, 0}; 
    size_t miblen = 4; 

    size_t size; 
    int st= sysctl(mib, miblen, NULL, &size, NULL, 0); 

    struct kinfo_proc * process = NULL; 
    struct kinfo_proc * newprocess = NULL; 

    do { 

     size += size/ 10; 
     newprocess = realloc(process, size); 

     if (!newprocess){ 

      if (process){ 
       free(process); 
      } 

      return nil; 
     } 

     process = newprocess; 
     st = sysctl(mib, miblen, process, &size, NULL, 0); 

    } while (st == -1 && errno == ENOMEM); 

    if (st == 0){ 

     if (size % sizeof(struct kinfo_proc) == 0){ 
      int nprocess = size/sizeof(struct kinfo_proc); 

      if (nprocess){ 

       NSMutableArray *array = [[NSMutableArray alloc]init]; 
       BOOL Found=NO; 

       for (int i = nprocess - 1; i >= 0; i--){ 


        NSString * processID = [[NSString alloc] initWithFormat:@"%d", process[i].kp_proc.p_pid]; 
        NSString * processName = [[NSString alloc] initWithFormat:@"%s", process[i].kp_proc.p_comm]; 
[array addObject:processName]; 
[processID release]; 
        [processName release]; 
        //[array addObject:dict]; 
        //[dict release]; 
       } 
free(process); 
       return [array autorelease]; 
      } 
     } 
    } 

    return nil; 
} 
@catch (NSException *ex) 
{ 
    NSLog(@"Exception is %@",ex); 
    return nil; 
} 

}

它提供信息。例如在应用程序,它给像神庙逃亡,SKYPE,愤怒的小鸟等 的应用程序的信息后,当我运行此代码一段时间,这给了应用程序列表,只有Skype。但剩下的应用程序出现在手机后台运行应用程序列表中。 那么请告诉我如何从运行应用程序列表的移动后台获取所有正在运行的应用程序列表。

回答

0

它是因为您认为后台运行的后台应用程序实际上并未在后台运行。他们只是应用程序的图标。

设备上的每个应用程序都在后台运行10分钟。之后,ios杀死这些线程,只显示图标。

尝试运行任何应用程序并将其推入后台,快速检查应用程序中正在运行的应用程序列表,您将在该应用程序列表中找到它。但10分钟后,你不会在那里找到它。

试试吧。让我知道我是对的吗?

+0

这不仅仅是10分钟后,只要操作系统需要这些资源。可能是几秒钟,可能是几个小时... –

相关问题