2012-09-25 29 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分鐘後,只要操作系統需要這些資源。可能是幾秒鐘,可能是幾個小時... –

相關問題