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