第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

iphone-背靠背為事件進(jìn)行投票

iphone-背靠背為事件進(jìn)行投票

iOS
猛跑小豬 2019-10-12 16:07:18
iphone-背靠背為事件進(jìn)行投票很長一段時(shí)間以來,我一直在研究一種在我的iPhone應(yīng)用程序中每隔X分鐘輪詢一次數(shù)據(jù)計(jì)數(shù)器的方法。在閱讀了大量的后臺執(zhí)行文檔和一些試用應(yīng)用程序之后,我認(rèn)為在不濫用后臺API的情況下,這是不可能的。上周,我發(fā)現(xiàn)這個應(yīng)用程序就是這么做的。http:/itunes.apple.com/us/app/DataMan-實(shí)時(shí)-數(shù)據(jù)-使用/id3932873?mt=8它在后臺運(yùn)行,并跟蹤您所使用的蜂窩/WiFi數(shù)據(jù)的計(jì)數(shù)。我懷疑開發(fā)人員正在注冊他的應(yīng)用程序以跟蹤位置變化,但是在應(yīng)用程序運(yùn)行時(shí),位置服務(wù)圖標(biāo)是不可見的,我認(rèn)為這是必需的。有沒有人知道如何做到這一點(diǎn)?
查看完整描述

3 回答

?
白衣染霜花

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超10個贊

我也見過這種行為。經(jīng)過多次嘗試,我發(fā)現(xiàn)了兩件事情,這可能會有所幫助。但我仍不清楚這會如何影響檢討過程。

如果您使用其中一個后臺功能,應(yīng)用程序?qū)⒂蒳OS在后臺再次啟動,一旦退出(由系統(tǒng))。我們稍后會濫用這個。

在我的例子中,我使用了在我的plist中啟用的VoIP回退。這里的所有代碼都是在AppDelegate中完成的:

// if the iOS device allows background execution,// this Handler will be called- (void)backgroundHandler {

    NSLog(@"### -->VOIP backgrounding callback");
    // try to do sth. According to Apple we have ONLY 30 seconds to perform this Task!
    // Else the Application will be terminated!
    UIApplication* app = [UIApplication sharedApplication];
    NSArray*    oldNotifications = [app scheduledLocalNotifications];

     // Clear out the old notification before scheduling a new one.
    if ([oldNotifications count] > 0) [app cancelAllLocalNotifications];

    // Create a new notification
    UILocalNotification* alarm = [[[UILocalNotification alloc] init] autorelease];
    if (alarm)
    {
        alarm.fireDate = [NSDate date];
        alarm.timeZone = [NSTimeZone defaultTimeZone];
        alarm.repeatInterval = 0;
        alarm.soundName = @"alarmsound.caf";
        alarm.alertBody = @"Don't Panic! This is just a Push-Notification Test.";

        [app scheduleLocalNotification:alarm];
    }}

注冊是在

- (void)applicationDidEnterBackground:(UIApplication *)application {

    // This is where you can do your X Minutes, if >= 10Minutes is okay.
    BOOL backgroundAccepted = [[UIApplication sharedApplication] setKeepAliveTimeout:600 handler:^{ [self backgroundHandler]; }];
    if (backgroundAccepted)
    {
        NSLog(@"VOIP backgrounding accepted");
    }}

現(xiàn)在神奇的事情發(fā)生了:我甚至不使用VoIP-Socket。但是這10分鐘的回調(diào)提供了一個很好的副作用:在10分鐘(有時(shí)更早)之后,我發(fā)現(xiàn)我的計(jì)時(shí)器和以前的運(yùn)行記錄被執(zhí)行了一段時(shí)間。你可以看到這個,如果你放置一些NSlog(.)進(jìn)入你的密碼。這意味著,這個簡短的“喚醒”會執(zhí)行一段時(shí)間的代碼。根據(jù)蘋果的說法,我們還有30秒的執(zhí)行時(shí)間。我想,類似線程的背景代碼正在執(zhí)行將近30秒。這是有用的代碼,如果你必須“有時(shí)”檢查一些東西。

醫(yī)生說,所有的背景任務(wù)(VoIP,音頻,位置更新)將在后臺自動重新啟動,如果應(yīng)用程序被終止。VoIP應(yīng)用程序?qū)⒃趩雍笤诤笈_自動啟動!

通過濫用這種行為,您可以使您的應(yīng)用程序看起來像運(yùn)行“永遠(yuǎn)”。為一個背景進(jìn)程(即VoIP)注冊。這將導(dǎo)致您的應(yīng)用程序在終止后重新啟動。

現(xiàn)在編寫一些“任務(wù)必須完成”的代碼。根據(jù)蘋果的說法,你有一些時(shí)間(5秒?)左轉(zhuǎn)完成任務(wù)。我發(fā)現(xiàn),這一定是CPU時(shí)間。這意味著:如果你什么也不做,你的應(yīng)用程序還在被執(zhí)行!蘋果建議,如果你的工作完成了,就打電話給一個呼氣處理程序。在下面的代碼中,您可以看到,我在期滿處理程序上有一個注釋。這將導(dǎo)致您的應(yīng)用程序運(yùn)行,只要系統(tǒng)允許您的應(yīng)用程序運(yùn)行。所有計(jì)時(shí)器和線程都在運(yùn)行,直到iOS終止應(yīng)用程序?yàn)橹埂?/trans>

- (void)applicationDidEnterBackground:(UIApplication *)application {

    UIApplication*    app = [UIApplication sharedApplication];

    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
        [app endBackgroundTask:bgTask];
        bgTask = UIBackgroundTaskInvalid;
    }];


    // Start the long-running task and return immediately.
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

    // you can do sth. here, or simply do nothing!
    // All your background treads and timers are still being executed
    while (background) 
       [self doSomething];
       // This is where you can do your "X minutes" in seconds (here 10)
       sleep(10);
    }

    // And never call the expirationHandler, so your App runs
    // until the system terminates our process
    //[app endBackgroundTask:bgTask];
    //bgTask = UIBackgroundTaskInvalid;

    }); }

在這里非??臻e的CPU時(shí)間,你的應(yīng)用程序運(yùn)行時(shí)間更長!但有一點(diǎn)是肯定的:你的應(yīng)用程序會在一段時(shí)間后被終止。但是因?yàn)槟阕粤四愕膽?yīng)用程序?yàn)閂oIP或其他的一個,系統(tǒng)在后臺重新啟動應(yīng)用程序,這將重新啟動你的后臺進(jìn)程;-)用這個乒乓,我可以做很多回植。但請記住,與CPU的時(shí)間是非??臻e的。并保存所有數(shù)據(jù),以恢復(fù)您的視圖-您的應(yīng)用程序?qū)⒃谝欢螘r(shí)間后終止。為了使它看起來仍在運(yùn)行,您必須在醒來后跳回最后的“狀態(tài)”。

我不知道這是不是你之前提到的應(yīng)用程序的方法,但它對我有用。

希望我能幫上忙

最新情況:

在測量了BG任務(wù)的時(shí)間之后,出現(xiàn)了一個驚喜。BG任務(wù)以600秒為限。這是VoIP最短時(shí)間的最小時(shí)間(setKeepAliveTimeout:600)。

因此,這段代碼在后臺導(dǎo)致“無限”執(zhí)行:

標(biāo)題:

UIBackgroundTaskIdentifier bgTask;

代碼:

// if the iOS device allows background execution,// this Handler will be called- (void)backgroundHandler {

    NSLog(@"### -->VOIP backgrounding callback");

    UIApplication*    app = [UIApplication sharedApplication];

    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
        [app endBackgroundTask:bgTask];
        bgTask = UIBackgroundTaskInvalid;
    }];

    // Start the long-running task 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

    while (1) {
        NSLog(@"BGTime left: %f", [UIApplication sharedApplication].backgroundTimeRemaining);
           [self doSomething];
        sleep(1);
    }   });     - (void)applicationDidEnterBackground:(UIApplication *)application {

    BOOL backgroundAccepted = [[UIApplication sharedApplication] setKeepAliveTimeout:600 handler:^{ [self backgroundHandler]; }];
    if (backgroundAccepted)
    {
        NSLog(@"VOIP backgrounding accepted");
    }

    UIApplication*    app = [UIApplication sharedApplication];

    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
        [app endBackgroundTask:bgTask];
        bgTask = UIBackgroundTaskInvalid;
    }];


    // Start the long-running task
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        while (1) {
            NSLog(@"BGTime left: %f", [UIApplication sharedApplication].backgroundTimeRemaining);
           [self doSomething];
           sleep(1);
        }    
    }); }

在應(yīng)用程序超時(shí)后,將調(diào)用VoIP期滿處理程序,您只需重新啟動一個長時(shí)間運(yùn)行的任務(wù)。此任務(wù)將在600秒后終止。但是會再次調(diào)用過期處理程序,這將啟動另一個長時(shí)間運(yùn)行的任務(wù),等等?,F(xiàn)在您只需檢查應(yīng)用程序是否返回到前臺。然后關(guān)閉bgTask,你就完成了。也許一個人能做某事。在長時(shí)間運(yùn)行的任務(wù)中,呼氣處理程序就像這樣。試試看。用你的控制臺,看看會發(fā)生什么.玩得開心!

更新2:

有時(shí)候簡化一些事情會有幫助。我的新方法是:

- (void)applicationDidEnterBackground:(UIApplication *)application {

    UIApplication*    app = [UIApplication sharedApplication];

    // it's better to move "dispatch_block_t expirationHandler"
    // into your headerfile and initialize the code somewhere else
    // i.e. 
    // - (void)applicationDidFinishLaunching:(UIApplication *)application {//// expirationHandler = ^{ ... } }
    // because your app may crash if you initialize expirationHandler twice.
    dispatch_block_t expirationHandler;
    expirationHandler = ^{

        [app endBackgroundTask:bgTask];
        bgTask = UIBackgroundTaskInvalid;


        bgTask = [app beginBackgroundTaskWithExpirationHandler:expirationHandler];
    };

    bgTask = [app beginBackgroundTaskWithExpirationHandler:expirationHandler];


    // Start the long-running task and return immediately.
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        // inform others to stop tasks, if you like
        [[NSNotificationCenter defaultCenter] postNotificationName:@"MyApplicationEntersBackground" object:self];

        // do your background work here     
    }); }

這起作用了網(wǎng)絡(luò)電話攻擊。根據(jù)文檔,如果執(zhí)行時(shí)間結(jié)束,過期處理程序(在本例中是我的“期滿處理程序”塊)將被執(zhí)行。通過將塊定義為塊變量,可以在過期處理程序中遞歸地再次啟動長時(shí)間運(yùn)行的任務(wù)。這也導(dǎo)致了無止境的處決。

如果應(yīng)用程序再次進(jìn)入前臺,請注意終止任務(wù)。如果你不再需要的話就終止任務(wù)。

根據(jù)我自己的經(jīng)驗(yàn),我測量了一些東西。使用位置回叫與有全球定位系統(tǒng)收音機(jī)是吸吮我的電池非???。使用我在更新2幾乎不需要任何能量。根據(jù)“用戶體驗(yàn)”,這是一種更好的方法。也許其他的應(yīng)用程序就是這樣工作的,把它的行為隱藏在GPS功能后面.



查看完整回答
反對 回復(fù) 2019-10-13
?
鳳凰求蠱

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超4個贊

什么起作用,什么不起作用

現(xiàn)在還不完全清楚這些答案中的哪一個有效&我浪費(fèi)了大量的時(shí)間來嘗試它們。以下是我對每一種策略的經(jīng)驗(yàn):

  1. 網(wǎng)絡(luò)電話攻擊-工作,但是

    將要

    如果你不是VOIP應(yīng)用程序,就會被拒絕
  2. 遞歸

    beginBackgroundTask...

    -不起作用。10分鐘后它就會退出。即使您嘗試了注釋中的修補(bǔ)程序(至少是截至2012年11月30日的注釋)。
  3. 無聲的音頻作品,但是人們因?yàn)檫@個而被拒絕。
  4. 本地/推送通知-在您的應(yīng)用程序被喚醒之前需要用戶交互
  5. 使用背景位置-作品

    ..詳情如下:

基本上,您使用“位置”后臺模式,以保持您的應(yīng)用程序在后臺運(yùn)行。它確實(shí)有效,即使用戶不允許位置更新。即使用戶按下HOME按鈕并啟動另一個應(yīng)用程序,您的應(yīng)用程序也將繼續(xù)運(yùn)行。如果你的應(yīng)用程序與位置無關(guān)的話,這也是一個電池消耗器&如果你的應(yīng)用程序與位置無關(guān)的話,這可能是審批過程中的一個環(huán)節(jié),但據(jù)我所知,這是唯一一個很有可能獲得批準(zhǔn)的解決方案。

下面是它的工作原理:

在你的褶皺里:

  • 應(yīng)用程序不在后臺運(yùn)行:否
  • 所需背景模式:地點(diǎn)

然后參考CoreLocation框架(在構(gòu)建階段),并在應(yīng)用程序中的某個地方添加這段代碼(在它進(jìn)入后臺之前):

#import <CoreLocation/CoreLocation.h>CLLocationManager* locationManager = [[CLLocationManager alloc] init];
[locationManager startUpdatingLocation];

注:startMonitoringSignificantLocationChanges將要工作。

值得一提的是,如果你的應(yīng)用程序崩潰,iOS就不會讓它復(fù)活。VOIP黑客是唯一能把它帶回來的黑客。



查看完整回答
反對 回復(fù) 2019-10-13
  • 3 回答
  • 0 關(guān)注
  • 483 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號