0

我正在开发一个应用程序。我已经编写了以下代码来获取后台运行应用程序的列表。

- (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;
}

}

它提供应用程序信息。例如,它提供应用程序信息,如 Templerun、Skype、Angrybirds 等。在我运行此代码一段时间后,这将应用程序列表仅提供为 Skype。但其余应用程序出现在移动后台运行的应用程序中列表。所以请告诉我如何从移动后台运行的应用程序列表中获取所有正在运行的应用程序列表。

4

1 回答 1

0

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

设备上的每个应用程序都在后台运行 10 minz。之后 ios 杀死了那些线程并只显示图标。

尝试运行任何应用程序,而不是将其推送到后台,快速检查应用程序中正在运行的应用程序列表,您会在那里找到它。但是在 10 minz 之后,你不会在那里找到它。

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

于 2013-02-22T15:45:50.280 回答