轉(zhuǎn)載 這種功能實(shí)際上就是數(shù)據(jù)同步,同時(shí)要考慮手機(jī)本身、電量、網(wǎng)絡(luò)流量等等限制因素,所以通常在移動端上有一下兩個(gè)解決方案:
員工經(jīng)過長期磨合與沉淀,具備了協(xié)作精神,得以通過團(tuán)隊(duì)的力量開發(fā)出優(yōu)質(zhì)的產(chǎn)品。創(chuàng)新互聯(lián)堅(jiān)持“專注、創(chuàng)新、易用”的產(chǎn)品理念,因?yàn)椤皩W⑺詫I(yè)、創(chuàng)新互聯(lián)網(wǎng)站所以易用所以簡單”。公司專注于為企業(yè)提供網(wǎng)站制作、網(wǎng)站建設(shè)、微信公眾號開發(fā)、電商網(wǎng)站開發(fā),小程序制作,軟件定制網(wǎng)站設(shè)計(jì)等一站式互聯(lián)網(wǎng)企業(yè)服務(wù)。
1.一種是定時(shí)去server查詢數(shù)據(jù),通常是使用HTTP協(xié)議來訪問web服務(wù)器,稱Polling(輪詢);
2.還有一種是移動端和服務(wù)器建立長連接,使用XMPP長連接,稱Push(推送)。
從耗費(fèi)的電量、流量和數(shù)據(jù)延遲性各方面來說,Push有明顯的優(yōu)勢。但是使用Push的缺點(diǎn)是:
對于客戶端:實(shí)現(xiàn)和維護(hù)相對成本高,在移動無線網(wǎng)絡(luò)下維護(hù)長連接,相對有一些技術(shù)上的開發(fā)難度。
對于服務(wù)器:如何實(shí)現(xiàn)多核并發(fā),cpu作業(yè)調(diào)度,數(shù)量龐大的長連接并發(fā)維護(hù)等技術(shù),仍存在開發(fā)難點(diǎn)。
在講述Push方案的原理前,我們先了解一下移動無線網(wǎng)絡(luò)的特點(diǎn)。
移動無線網(wǎng)絡(luò)的特點(diǎn):
因?yàn)?IP v4 的 IP 量有限,運(yùn)營商分配給手機(jī)終端的 IP 是運(yùn)營商內(nèi)網(wǎng)的 IP,手機(jī)要連接 Internet,就需要通過運(yùn)營商的網(wǎng)關(guān)做一個(gè)網(wǎng)絡(luò)地址轉(zhuǎn)換(Network Address Translation,NAT)。簡單的說運(yùn)營商的網(wǎng)關(guān)需要維護(hù)一個(gè)外網(wǎng) IP、端口到內(nèi)網(wǎng) IP、端口的對應(yīng)關(guān)系,以確保內(nèi)網(wǎng)的手機(jī)可以跟 Internet 的服務(wù)器通訊
GGSN(Gateway GPRS
Support Node 網(wǎng)關(guān)GPRS支持結(jié)點(diǎn))模塊就實(shí)現(xiàn)了NAT功能。
因?yàn)榇蟛糠忠苿訜o線網(wǎng)絡(luò)運(yùn)營商都是為了減少網(wǎng)關(guān)的NAT映射表的負(fù)荷,所以如果發(fā)現(xiàn)鏈路中有一段時(shí)間沒有數(shù)據(jù)通訊時(shí),會刪除其對應(yīng)表,造成鏈路中斷。(關(guān)于NAT的作用及其原理可以查看我的另一篇博文:關(guān)于使用UDP(TCP)跨局域網(wǎng),NAT穿透的心得)
Push在Android平臺上長連接的實(shí)現(xiàn):
既然我們知道我們移動端要和Internet進(jìn)行通信,必須通過運(yùn)營商的網(wǎng)關(guān),所以,為了不讓NAT映射表失效,我們需要定時(shí)向Internet發(fā)送數(shù)據(jù),因?yàn)橹皇菫榱瞬蝗籒AT映射表失效,所以只需發(fā)送長度為0的數(shù)據(jù)即可。
這時(shí)候就要用到定時(shí)器,在android系統(tǒng)上,定時(shí)器通常有一下兩種:
1.java.util.Timer
2.android.app.AlarmManager
分析:
Timer:可以按照計(jì)劃或者時(shí)間周期來執(zhí)行相關(guān)的任務(wù)。但是Timer需要用WakeLock來讓CPU保持喚醒狀態(tài),才能保證任務(wù)的執(zhí)行,這樣子會消耗大量流量;當(dāng)CPU處于休眠的時(shí)候,就不能喚醒執(zhí)行任務(wù),所以應(yīng)用于移動端明顯是不合適。
AlarmManager:AlarmManager類是屬于android系統(tǒng)封裝好來管理RTC模塊的管理類。這里就涉及到RTC模塊,要更好地了解兩者的區(qū)別,就要明白兩者真正的區(qū)別。
RTC(Real- Time Clock)實(shí)時(shí)鬧鐘在一個(gè)嵌入式系統(tǒng)中,通常采用RTC
來提供可靠的系統(tǒng)時(shí)間,包括時(shí)分秒和年月日等;而且要求在系統(tǒng)處于關(guān)機(jī)狀態(tài)下它也能夠正常工作(通常采用后備電池供電),它的外圍也不需要太多的輔助電路,典型的就是只需要一個(gè)高精度的32.768KHz
晶體和電阻電容等。(如果對這方面感興趣,可以自己查閱相關(guān)資料,這里就說個(gè)大概)
好了,回來正題。所以,AlarmManager又稱全局定時(shí)鬧鐘。這意味著,當(dāng)我用使用AlarmManager來定時(shí)執(zhí)行任務(wù),CPU可以正常地休眠,只有在執(zhí)行任務(wù)是,才喚醒CPU,這個(gè)過程是很短時(shí)間的。
下面簡單來說明其使用:
1.類似于Timer功能:
//獲得鬧鐘管理器
AlarmManager
am = (AlarmManager)getSystemService(ALARM_SERVICE);
//設(shè)置任務(wù)執(zhí)行計(jì)劃
am.setRepeating(AlarmManager.ELAPSED_REALTIME, firstTime, 5*1000,
sender);//從firstTime才開始執(zhí)行,每隔5秒再執(zhí)行
2.實(shí)現(xiàn)全局定時(shí)功能:
//獲得鬧鐘管理器
AlarmManager
am = (AlarmManager)getSystemService(ALARM_SERVICE);
//設(shè)置任務(wù)執(zhí)行計(jì)劃
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime,
5*1000, sender);//從firstTime才開始執(zhí)行,每隔5秒再執(zhí)行
總結(jié):在android客戶端使用Push推送時(shí),應(yīng)該使用AlarmManager來實(shí)現(xiàn)心跳功能,使其真正實(shí)現(xiàn)長連接。
Android是基于Linux開發(fā)的系統(tǒng),所以它可以使用MySQL數(shù)據(jù)庫標(biāo)準(zhǔn)運(yùn)行完整的Web服務(wù)器功能,便毫不奇怪了。服務(wù)器而已支持PHP和FTP傳輸,你甚至可以將其放到互聯(lián)網(wǎng)上。對于開發(fā)人員來說,可以使用這項(xiàng)功能來測試代碼,然后為客戶演示,或者是作為自己博客的服務(wù)器使用。除了手機(jī),你還可以將低價(jià)的Android迷你電腦作為廉價(jià)服務(wù)器使用。
1、判斷應(yīng)用已經(jīng)啟動
ActivityManager
am
=
(ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
List/spanRunningTaskInfo
list
=
am.getRunningTasks(100);
for
(RunningTaskInfo
info
:
list)
{
if
(info.topActivity.getPackageName().equals(MY_PKG_NAME)
info.baseActivity.getPackageName().equals(MY_PKG_NAME))
{
isAppRunning
=
true;
//find
it,
break
break;
}
}
100表示取的最大的任務(wù)數(shù),info.topActivity表示當(dāng)前正在運(yùn)行的Activity,info.baseActivity表系統(tǒng)后臺有此
進(jìn)程在運(yùn)行,具體要做如何判斷就看自已的業(yè)務(wù)需求。這個(gè)類還有更多的方法可以取得系統(tǒng)運(yùn)行的服務(wù)、內(nèi)存使用情況等的方法,請各位自行查找。
有一點(diǎn)要注意,如果想正常運(yùn)行此方法,請?jiān)谀愕?/p>
AndroidManifest.xml
中加入:
android:name="android.permission.GET_TASKS"
/
否則可能會有exception拋出。
2、判斷服務(wù)已經(jīng)啟動運(yùn)行
前言:現(xiàn)在的大多數(shù)移動端應(yīng)用都有實(shí)時(shí)得到消息的能力,簡單來說,有發(fā)送消息的主動權(quán)和接受消息的被動權(quán)。例如:微信,QQ,天氣預(yù)報(bào)等等,相信好處和用戶體驗(yàn)相信大家都知道吧。
提出問題:這種功能必須涉及client(客戶端)和server(服務(wù)器),所以到底client如何和server實(shí)現(xiàn)實(shí)時(shí)連接通訊?
分析問題:這種功能實(shí)際上就是數(shù)據(jù)同步,同時(shí)要考慮手機(jī)本身、電量、網(wǎng)絡(luò)流量等等限制因素,所以通常在移動端上有一下兩個(gè)解決方案:
1.一種是定時(shí)去server查詢數(shù)據(jù),通常是使用HTTP協(xié)議來訪問web服務(wù)器,稱Polling(輪詢);
2.還有一種是移動端和服務(wù)器建立長連接,使用XMPP長連接,稱Push(推送)。
從耗費(fèi)的電量、流量和數(shù)據(jù)延遲性各方面來說,Push有明顯的優(yōu)勢。但是使用Push的缺點(diǎn)是:
對于客戶端:實(shí)現(xiàn)和維護(hù)相對成本高,在移動無線網(wǎng)絡(luò)下維護(hù)長連接,相對有一些技術(shù)上的開發(fā)難度。
對于服務(wù)器:如何實(shí)現(xiàn)多核并發(fā),cpu作業(yè)調(diào)度,數(shù)量龐大的長連接并發(fā)維護(hù)等技術(shù),仍存在開發(fā)難點(diǎn)。轉(zhuǎn)載,僅供參考。
能設(shè)置禁止被Android同步服務(wù)器啟動,步驟如下:
1、在“應(yīng)用程序”界面中點(diǎn)擊“設(shè)置”圖標(biāo)進(jìn)入其界面。
2、找到并點(diǎn)擊“賬戶與同步”選項(xiàng)進(jìn)入其界面,取消選中“背景數(shù)據(jù)”和“自動同步”選項(xiàng)即可。
給android設(shè)備提供了兩種網(wǎng)絡(luò)代理,一種是直接在網(wǎng)絡(luò)設(shè)置中運(yùn)行,另一種是通過adb指令運(yùn)行。最常用的一種是設(shè)置頁面操作,模擬器大家應(yīng)該都知道的吧,就是可以在電腦端運(yùn)行的手機(jī)環(huán)境人家,第一種方式就是給大家推薦使用這個(gè),實(shí)現(xiàn)方式具體如下。
第一種、模擬器設(shè)置代理服務(wù)器
設(shè)置--WLAN,選擇網(wǎng)絡(luò)長按(不同設(shè)備操作方式不同,點(diǎn)擊按鈕也不同)--修改網(wǎng)絡(luò)--高級選項(xiàng),將代理選項(xiàng)設(shè)置為手動,在代理服務(wù)器主機(jī)名中填寫您想設(shè)置的代理服務(wù)器IP,在相應(yīng)端口上填寫相應(yīng)端口(如Fiddler為8888),完成設(shè)置后點(diǎn)擊保存即可。
第二種、通過adb指令設(shè)置代理,操作方式如下
設(shè)置代理:
adbshellsettingsputglobalhttp_proxip:port.
例如:
adbshellsettingsputglobalhttp_proxy127.0.0.1:8888.
移除代理(三個(gè)指令都需要執(zhí)行,部分機(jī)型可能需要重啟手機(jī)才能完全移除代理):
adbshellsettingsdeleteglobalhttp_proxy.
adbshellsettingsdeleteglobalglobal_http_proxy_host.
adbshellsettingsdeleteglobalglobal_http_proxy_port.
adbreboot.
以上兩種方法基本可以解決大部分場景。大家不妨進(jìn)行嘗試下,內(nèi)容還是相當(dāng)簡單的。
文章題目:android服務(wù)器,安卓推送服務(wù)
本文URL:http://aaarwkj.com/article4/dsiegoe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、網(wǎng)站收錄、網(wǎng)站排名、網(wǎng)站維護(hù)、做網(wǎng)站、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)