1、需求:網(wǎng)絡(luò)切換 、前后臺、掛起恢復(fù)時 MQTT暫?;驍嚅_和連接運(yùn)行
2、說明:本項(xiàng)目是外匯APP,程序啟動時,行情數(shù)據(jù)實(shí)時推送至移動端
3、問題:
1)前后臺、掛起恢復(fù)時 MQTT 暫?;蜻\(yùn)行沒問題;
applicationWillEnterForeground和applicationDidBecomeActive 方法里添加
[selfMQTTDataRefresh];方法如下:
//行情刷新方法
-(void)MQTTDataRefresh{
///////////////////////tcp 方式 mqtt//////////////////////
dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
[[MQTTClientManagershareInstance] registerDelegate:self];
[[MQTTClientManagershareInstance]pushWithTopic:kMQTT_Topic_Market_data_infoWillMsg:nil];
[[MQTTClientManagershareInstance]pushWithTopic:kMQTT_Topic_Trades_InfoWillMsg:nil];
});
}
2)ios10 上拉菜單時切換網(wǎng)絡(luò),MQTT的行情實(shí)時數(shù)據(jù)獲取不了;/**
斷開連接,清空數(shù)據(jù)
*/
-(void)close{
NSLog(@"-----------------MQTT主動斷開連接-----------------");
[_transportclose];
[_mqttSessionclose];
_delegate=nil;//代理
_mqttSession=nil;
_transport=nil;//連接服務(wù)器屬性
_ip=nil;//服務(wù)器ip地址
_port=0;//服務(wù)器ip地址
_userName=nil;//用戶名
_password=nil;//密碼
_topic=nil;//單個主題訂閱
_topics=nil;//多個主題訂閱
_mqttStatus=nil;//連接服務(wù)器狀態(tài)
_flag=nil;//目前只用于返回token上傳結(jié)果
_isAutoConnect=false;//是否自動重連標(biāo)識
_connectCount=0;//自動重連次數(shù)
_nowCount=0;//當(dāng)前已經(jīng)重連的次數(shù)
}
{在【網(wǎng)易新聞】App上看視頻的時候,【網(wǎng)易視頻】只是對第一種情況進(jìn)行處理,即暫停視頻;而剩余的情況都不做處理,視頻繼續(xù)播放。
這個應(yīng)該是對用戶交互細(xì)化,引起我的興趣。有時候,我只是使用一下上拉快捷菜單做一些簡單的開關(guān),比如:打開手電筒、打開wifi、關(guān)閉旋轉(zhuǎn)等。不希望后面的視頻停止?,F(xiàn)在市面上有些App,對這三種情況都是先暫停,前臺再恢復(fù),但是視覺上還是會卡一下。}
于是在
applicationWillResignActive 方法里添加 關(guān)閉+銷毀單利方式
[MQTTClientManagerattempDealloc];才搞定
+(void)attempDealloc{
onceToken =0; //只有置成0,GCD才會認(rèn)為它從未執(zhí)行過.它默認(rèn)為0.這樣才能保證下次再次調(diào)用shareInstance的時候,再次創(chuàng)建對象.
if (instance) {
[instanceclose];
instance =nil;
}
}