С помощью sysctl вы можете получить много информации о запущенных процессах. См. В этом коде, вы можете найти все запущенные процессы, а также время начала каждого процесса. Этот код не является частным API, поэтому его следует принять Apple в случае его публикации в Apple Store. Взгляните в «struct kinfo_proc» в sysctl.h, вы найдете полезную информацию. Я не знаю, как определить, находится ли процесс на переднем плане или на заднем плане. Я могу найти только start_time, а затем вычислить время выполнения. Однако, когда вы запускаете это приложение на переднем плане, другие процессы, вероятно, находятся в фоновом режиме, не так ли?
#import <sys/sysctl.h>
- (NSArray *)runningProcesses
{
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];
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];
struct timeval t = process[i].kp_proc.p_un.__p_starttime;
long ms = t.tv_sec;
NSDate *startDate = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate:ms];
NSDictionary *dict = [[NSDictionary alloc] initWithObjects:[NSArray arrayWithObjects:processID, processName, startDate, nil]
forKeys:[NSArray arrayWithObjects:@"ProcessID", @"ProcessName",@"StartDate", nil]];
[array addObject:dict];
}
free(process);
return array;
}
}
}
return nil;
}
Не ваше собственное приложение, а другие приложения? Как вы узнаете, что это за приложения? –
Да другие приложения. Есть приложения, такие как batteryDoctor, которые говорят вам о потреблении батареи в разных приложениях, поэтому это возможно. – angerhang
Удалось ли отслеживать время работы других приложений? Какое у вас обновление? – Imran