iOS殺死程序后調(diào)用網(wǎng)絡(luò)請求和數(shù)據(jù)庫操作

項目中碰到一個需求,就是在退出控制器后進行埋點操作塞赂,正常情況我們在controller的delloc中執(zhí)行埋點的網(wǎng)絡(luò)請求就OK了,但是還有一種情況昼蛀,如果用戶殺死程序宴猾,是不會走delloc方法的。這時候需要監(jiān)聽殺死程序的通知叼旋,這里貼下最終代碼仇哆,想看思路的請往后看。

- (void)viewDidLoad {
    [super viewDidLoad];
    //監(jiān)聽通知
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillTerminate:) name:@"UIApplicationWillTerminateNotification" object:nil];
}

//程序被殺死
- (void)applicationWillTerminate:(UIApplication *)application {
    //進行埋點操作
    [self uploadData];
    [NSThread sleepForTimeInterval:5];
    NSLog(@"程序被殺死");
}

  • 一開始想著直接在監(jiān)聽到殺死App后直接埋點夫植,所以在控制器中加入了如下代碼:
- (void)viewDidLoad {
    [super viewDidLoad];
    //監(jiān)聽通知
   [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillTerminate:) name:@"UIApplicationWillTerminateNotification" object:nil];
}


//程序被殺死
- (void)applicationWillTerminate:(UIApplication *)application {
    //進行埋點操作
    [self uploadData];
    NSLog(@"程序被殺死");
}

  • 本以為這樣就大功告成了讹剔,誰知道埋點沒生效,打斷點發(fā)現(xiàn)殺死程序后網(wǎng)絡(luò)請求并沒有走完详民。了解到系統(tǒng)執(zhí)行完回調(diào)applicationWillTerminate:后延欠,在那一次主線程 runloop 結(jié)束, 系統(tǒng)就會殺死應(yīng)用進程沈跨, 所以后續(xù)的網(wǎng)絡(luò)請求由捎,磁盤操作,異步代碼 等等就都沒執(zhí)行了饿凛。在網(wǎng)上查找資料主要有兩種方法:1.說要把這里的網(wǎng)絡(luò)請求改成在主線程狞玛。2.另外一種方法是阻塞主線程,這里貼下該作者的代碼地址http://www.reibang.com/p/5142ebe74c6d涧窒。
  • 看了這兩種方法心肪,覺得第一種方法網(wǎng)絡(luò)請求改主線程太過麻煩,因為我這里的埋點有好幾個纠吴,所以選擇第二種方法蒙畴,但覺得作者的做法也太麻煩了,按照思路,無非就是阻塞主線程膳凝,讓埋點的網(wǎng)絡(luò)請求走完才讓主線程結(jié)束碑隆,這時候我突然靈機一動:我們啟動APP進入歡迎界面一般就需要沉睡幾秒才進入主界面:
[NSThread sleepForTimeInterval:3];

是否可以利用這個方法實現(xiàn)我們的需求?于是我在監(jiān)聽到App被殺死蹬音,進行埋點操作后加入上面的代碼上煤。

- (void)viewDidLoad {
    [super viewDidLoad];
    //監(jiān)聽通知
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillTerminate:) name:@"UIApplicationWillTerminateNotification" object:nil];
}

//程序被殺死
- (void)applicationWillTerminate:(UIApplication *)application {
    //進行埋點操作
    [self uploadData];
    [NSThread sleepForTimeInterval:5];
    NSLog(@"程序被殺死");
}

發(fā)現(xiàn)此方法確實可行,而且簡單著淆,但有個缺點就是如果網(wǎng)絡(luò)請求慢的話劫狠,有可能埋點會失敗。大家可以嘗試用NSTimer阻塞永部,然后埋點網(wǎng)絡(luò)請求完后invalidate独泞。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市苔埋,隨后出現(xiàn)的幾起案子懦砂,更是在濱河造成了極大的恐慌,老刑警劉巖组橄,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荞膘,死亡現(xiàn)場離奇詭異,居然都是意外死亡玉工,警方通過查閱死者的電腦和手機羽资,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來遵班,“玉大人屠升,你說我怎么就攤上這事∠林#” “怎么了弥激?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長愿阐。 經(jīng)常有香客問我微服,道長,這世上最難降的妖魔是什么缨历? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任以蕴,我火速辦了婚禮,結(jié)果婚禮上辛孵,老公的妹妹穿的比我還像新娘丛肮。我一直安慰自己,他們只是感情好魄缚,可當(dāng)我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布宝与。 她就那樣靜靜地躺著焚廊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪习劫。 梳的紋絲不亂的頭發(fā)上咆瘟,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天,我揣著相機與錄音诽里,去河邊找鬼袒餐。 笑死,一個胖子當(dāng)著我的面吹牛谤狡,可吹牛的內(nèi)容都是我干的灸眼。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼墓懂,長吁一口氣:“原來是場噩夢啊……” “哼焰宣!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起捕仔,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤匕积,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后逻澳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡暖呕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年斜做,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片湾揽。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡瓤逼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出库物,到底是詐尸還是另有隱情霸旗,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布戚揭,位于F島的核電站诱告,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏民晒。R本人自食惡果不足惜精居,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望潜必。 院中可真熱鬧靴姿,春花似錦、人聲如沸磁滚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至维雇,卻和暖如春淤刃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背谆沃。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工钝凶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人唁影。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓耕陷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親据沈。 傳聞我的和親對象是個殘疾皇子哟沫,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,802評論 2 345