NSTimer a akcelerometr v iPhone / iPad

hlasů
2

Mám požadavek v mé aplikaci, která vyžaduje, abych zobrazení nějaké zprávy pro uživatele, pokud není žádná aktivita se děje po dobu 3 hodin na App / iPad. Považoval jsem řešení má NSTimer že by spuštění při startu. V případě, že uživatel provede jakoukoli akci, I vyvrátit časovač a začít nový. Nicméně, tam je přehrávání videa v aplikaci a pokud vím, uživatel může být sledování videa za přibližně 3 hodiny a neprovede žádnou jinou akci, během této doby, a by ještě dostat zprávu.

Takže alternativou je znehodnotit a spuštění časovače pokaždé, když detekuje iPad / iPhone se posunula. Jinými slovy, pomocí akcelerometru a ve zpětné volání detekovat zrychlení, mohu vyvrátit a znovu vytvořit časovač. Ale moje starost s tímto přístupem je, že i pro nejmenší pohyby, časovač bude muset být zrušena a znovu. Bude tento přístup v jakémkoli chování při nárazu způsobem?

Díky a pozdravem, hetal

Položena 24/09/2010 v 20:40
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
0

Apple má funkci v multitaskingu, které říkají „Task dokončovací“ použití podle - (UIBackgroundTaskIdentifier)beginBackgroundTaskWithExpirationHandler:(void(^)(void))handler Nalezené zde i další věci tady

Odpovězeno 24/09/2010 v 20:57
zdroj uživatelem

hlasů
0

Vytvoříte časovač není , že drahé, ale je to stále trochu drahé.

Dobrou zprávou je, že můžete libovolně měnit datum požáru:

[timer setFireDate:[NSDate dateWithTimeIntervalSinceNow:3*60*60]];

Alternativně pro velmi mírně menší režií:

CFRunLoopTimerSetNextFireDate((CFRunLoopTimerRef)timer, CFAbsoluteTimeGetCurrent()+3*60*60);

(Myslím, že CFAbsoluteTimeGetCurrent () režie je větší než režii objektově tvorby, ale meh.)

O něco lepším řešením by mohlo být nechat časovač sám většinu času; jednoduše aktualizovat „Poslední aktivita“ časové razítko. Když časovač požáry, podívejte se na „Poslední aktivita“ časovým razítkem. Pokud je to před více než 3 hodiny, thenshow oznámení. Pokud je to před méně než 3 hodiny, pak nastavte další den požáru příslušně; To znamená, že časovače požáry (v průměru) nanejvýše každých 1,5 hodiny, což je zřejmě není tak nákladné, protože opakovaně mění požární datum.

Viz mach_absolute_time()poměrně nízko nad hlavou časové základny (pre-výpočtu, co 3 hodiny v mach_absolute_time jednotkách). Stále trvá asi 3 mikrosekund, což je prakticky navždy (1000 hodiny cyklů!).

Pokud jste opravdu znepokojen nad hlavou, jednoduše nastavit „aktivita“ příznak pokaždé se něco děje, a použití (např) časovač 1 hodina. Když časovač požárů, něco takového if (activity) {counter = 0; activity = 0; } else { counter ++; if (counter == 3) { ... } }. Je sporné, zda několik mikrosekund tu a tam jsou dražší než časovač střelby každou hodinu, ale oba jsou docela zanedbatelné.

Daleko větší problém je, že akcelerometr jí sílu a CPU času (a dodávat aktualizace vyžaduje čas procesoru). Nastavení updateInterval = 10nebo tak sníží režijní náklady, a to omezena na rozumnou hodnotu (asi 1 s) ze strany OS.

Odpovězeno 25/09/2010 v 01:42
zdroj uživatelem

hlasů
0

Nemůžeš poslat zprávu na váš NSTimerkdykoliv spustí video, znehodnotit časovač? Pak, když film skončí, spusťte časovač zpět nahoru.

Odpovězeno 25/09/2010 v 01:53
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more