Freqüência real do dispositivo de movimento atualizações menor do que o esperado, mas a escala com a definição de

StackOverflow https://stackoverflow.com/questions/5034411

Pergunta

Estou a portar um aplicativo que eu escrevi originalmente usando o acelerômetro do aparelho para o IOS 3, para incorporar o novo IOS 4 recursos de movimento.

Durante a captura de movimento, o aplicativo faz pouco mais - não há atualizações gráficas, por exemplo.

Eu estou fazendo o seguinte procedimento para configurar o movimento atualizações, como uma substituição para o meu antigo uso do acelerômetro.Eu sei que eu poderia reconstruir a fazer a minha própria pesquisa usando NSTimer ou alguma coisa, e poderá exercer essa ainda.

[motionManager setDeviceMotionUpdateInterval:updateInterval];
CMDeviceMotionHandler motionHandler = ^(CMDeviceMotion *motion, NSError *error) {
[self processMotion:motion withError:error];
};

[motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:motionHandler];

Isso funciona, mas o intervalo de atualização não se comportar conforme o esperado.Eu já retirados todos do código de execução no processMotion método, exceto para o verão fora de carimbos de data / hora para ver qual é a real movimento de taxa de atualização é.Eu testei isso é suficiente para provar a mim mesmo que é repetitivo, mesmo que o resultado estranho para 1/40.A tabela abaixo mostra o que eu estou vendo:

updateInterval  actual events per second
1.0/20.0        13
1.0/30.0        27
1.0/40.0        27
1.0/50.0        34
1.0/60.0        40
1.0/70.0        57
1.0/90.0        60
1.0/100.0      74

Algumas notas:
1.tenho a certeza de que o intervalo de actualização é definida corretamente, e de ter verificado que, após o ajuste para confirmar.

2.Tenho a certeza de que eu estou acompanhamento de todas as chamadas de processMotion, não existem quaisquer chamadas feitas com nil CMDeviceMotion ou outros estranheza

3.Eu não estou fazendo qualquer transformação significativa que possa bloquear as coisas, esperando apenas em eventos de movimento e gravação.Isso tudo funcionou perfeitamente bem como um representante para o acelerômetro

4.o movimento de dados é bom, só muito raramente atualizado :)

5.isso é usando o ios 4.2, em um ipod touch 4ª geração

6.Eu procurei o melhor que eu posso, não vi uma explicação, embora eu já vi alguns relatos de pessoas vendo 50hz frequência de atualização quando da solicitação de 60hz, o que poderia estar relacionado.

A próxima coisa que eu vou tentar é a criação de um dedicado fila para o processamento em vez de usar a fila atual, no entanto, eu queria ver se isso era um comportamento conhecido.Eu poderia compreender se a taxa de atualização foi afunilado, de alguma forma, mas não sei por que ainda seria uma escala para cima, como mostrado, se fosse o caso.

Novamente, eu suponho que eu poderia reconstruir usar NSTimer e fazer a minha própria pesquisa, mas eu gostaria de entender por que eu estou vendo isso, no caso, eu sou mal-entendido, fundamentalmente, o Núcleo do Movimento framework.

Foi útil?

Solução

Ok, aqui está uma possível solução:

Número de operações simultâneas em NSOperationQueue são determinados pelo sistema operacional.Isso significa que às vezes pode ser muito poucos ou mesmo 1 operação por vez.

Você pode definir explicitamente o número de operações para um determinado número razoável, por exemplo,

[operationQueue setMaxConcurrentOperationCount:5];

Desfrute.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top