欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android中利用App實現(xiàn)消息推送機(jī)制的代碼

 更新時間:2011年05月07日 20:33:13   作者:  
Android中利用App實現(xiàn)消息推送機(jī)制的代碼,需要的朋友可以參考下。
1.消息推送機(jī)制
服務(wù)器器端需要變被動為主動,通知客戶一些開發(fā)商認(rèn)為重要的信息,無論應(yīng)用程序是否正在運(yùn)行或者關(guān)閉。
我想到了一句話:don't call me,i will call you!
qq今天在右下角彈出了一個對話框:"奧巴馬宣布本拉登掛了...",正是如此。
自作聰明,就會帶點(diǎn)小聰明,有人喜歡就有人討厭。
2.獨(dú)立進(jìn)程
無論程序是否正在運(yùn)行,我們都要能通知到客戶,我們需要一個獨(dú)立進(jìn)程的后臺服務(wù)。
我們需要一個獨(dú)立進(jìn)程的后臺服務(wù)。
在androidmanifest.xml中注冊service時,有一個android:process屬性,如果這個屬性以"."開頭,則為此服務(wù)開啟一個
全局的獨(dú)立進(jìn)程,如果以":"開頭則為此服務(wù)開啟一個為此應(yīng)用私有的獨(dú)立進(jìn)程。舉個具體的例子吧,我們新建了一個
application,創(chuàng)建了主進(jìn)程com.cnblogs.tianxia,那么:
復(fù)制代碼 代碼如下:

<!--下面會創(chuàng)建一個全局的com.cnblogs.tianxia.message的獨(dú)立進(jìn)程-->
<service android:name=".service.messageservice" android:label="消息推送" android:process=".message" />
<!--或者-->
<!--下面會創(chuàng)建一個應(yīng)用私有的com.cnblogs.tianxia:message的獨(dú)立進(jìn)程-->
<service android:name=".service.messageservice" android:label="消息推送" android:process=":message" />
我們沒必要建立一個全局的,本文選擇第二種方案,創(chuàng)建一個當(dāng)前應(yīng)用私有的獨(dú)立進(jìn)程。
3.通知用戶和點(diǎn)擊查看
public class messageservice extends service {

//獲取消息線程
private messagethread messagethread = null;

//點(diǎn)擊查看
private intent messageintent = null;
private pendingintent messagependingintent = null;

//通知欄消息
private int messagenotificationid = 1000;
private notification messagenotification = null;
private notificationmanager messagenotificatiomanager = null;

public ibinder onbind(intent intent) {
return null;
}

@override
public int onstartcommand(intent intent, int flags, int startid) {
//初始化
messagenotification = new notification();
messagenotification.icon = r.drawable.icon;
messagenotification.tickertext = "新消息";
messagenotification.defaults = notification.default_sound;
messagenotificatiomanager = (notificationmanager)getsystemservice(context.notification_service);

messageintent = new intent(this, messageactivity.class);
messagependingintent = pendingintent.getactivity(this,0,messageintent,0);

//開啟線程
messagethread = new messagethread();
messagethread.isrunning = true;
messagethread.start();

return super.onstartcommand(intent, flags, startid);
}

/**
* 從服務(wù)器端獲取消息
*
*/
class messagethread extends thread{
//運(yùn)行狀態(tài),www.3ppt.com下一步驟有大用
public boolean isrunning = true;
public void run() {
while(isrunning){
try {
//休息10分鐘
thread.sleep(600000);
//獲取服務(wù)器消息
string servermessage = getservermessage();
if(servermessage!=null&&!"".equals(servermessage)){
//更新通知欄
messagenotification.setlatesteventinfo(messageservice.this,"新消息","奧巴馬宣布,本拉
登兄弟掛了!"+servermessage,messagependingintent);
messagenotificatiomanager.notify(messagenotificationid, messagenotification);
//每次通知完,通知id遞增一下,避免消息覆蓋掉
messagenotificationid++;
}
} catch (interruptedexception e) {
e.printstacktrace();
}
}
}
}

/**
* 這里以此方法為服務(wù)器demo,僅作示例
* @return 返回服務(wù)器要推送的消息,否則如果為空的話,不推送
*/
public string getservermessage(){
return "yes!";
}
}


其中messageactivity是點(diǎn)擊跳轉(zhuǎn)的activity,負(fù)責(zé)處理查看詳細(xì)信息。
我們在其他activity中調(diào)用一下:
復(fù)制代碼 代碼如下:

boolean ismessagepush = true;//不開啟就設(shè)置為false;
...
if(ismessagepush){
startservice(new intent(this, messageservice.class))
};

運(yùn)行一下:
4.停止服務(wù)
1 stopservice(new intent(myactivity.this,messageservice.class));
2 setmessagepush(false);//設(shè)置配置文件或數(shù)據(jù)庫中flag為false
運(yùn)行一下,停止服務(wù)后,卻出乎意料的并沒有停下來,怎么回事?是不是代碼寫錯了?
代碼沒有錯,錯在我們停止了服務(wù),卻沒有停止進(jìn)程,退出線程。
5.退出線程
實踐證明,thread的stop()方法并不可靠。但是我們有其他的辦法。
在代碼面前,程序員就是上帝。
退出線程有兩種方法。
第一種方法,強(qiáng)制退出。
//殺死該線程所在的進(jìn)程,自然就退出了
2 system.exit(0);
第二種方法,設(shè)置isrunning為false。
view sourceprint?1 //前面說到了isrunning這個標(biāo)志,設(shè)置為false后,線程的執(zhí)行就從while循環(huán)中跳出來了,然后自然結(jié)束
掉了
2 messagethread.isrunning = false;
綜合一下,我們在messageservice中重載ondestroy()方法如下:
復(fù)制代碼 代碼如下:

@override
public void ondestroy() {
system.exit(0);
//或者,二選一,推薦使用system.exit(0),這樣進(jìn)程退出的更干凈
//messagethread.isrunning = false;
super.ondestroy();
}

相關(guān)文章

  • Android批量修改文件格式/文件名的神操作分享

    Android批量修改文件格式/文件名的神操作分享

    最近工作中遇到了一個功能,需要批量修改文件格式,發(fā)現(xiàn)實現(xiàn)的過程挺值得分享的,所以下面這篇文章主要給大家介紹了關(guān)于Android批量修改文件格式/文件名的神操作,需要的朋友可以參考下
    2021-09-09
  • Android RecyclerView設(shè)置下拉刷新的實現(xiàn)方法

    Android RecyclerView設(shè)置下拉刷新的實現(xiàn)方法

    這篇文章主要介紹了Android RecyclerView設(shè)置下拉刷新的實現(xiàn)方法,希望通過本文通過SwipeRefreshLayout方式實現(xiàn)下拉刷新,需要的朋友可以參考下
    2017-10-10
  • Android實現(xiàn)拼多多地址選擇器

    Android實現(xiàn)拼多多地址選擇器

    這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)拼多多地址選擇器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • OpenHarmony如何調(diào)用電話服務(wù)API撥打電話

    OpenHarmony如何調(diào)用電話服務(wù)API撥打電話

    OpenHarmony3.1版本標(biāo)準(zhǔn)系統(tǒng)增加了通話相關(guān)的聯(lián)系人應(yīng)用,來電應(yīng)用等,在系統(tǒng)服務(wù)層面電話相關(guān)功能也比較完善,這篇文章主要介紹了OpenHarmony如何調(diào)用電話服務(wù)API撥打電話
    2022-11-11
  • Android M(6.x)使用OkHttp包解析和發(fā)送JSON請求的教程

    Android M(6.x)使用OkHttp包解析和發(fā)送JSON請求的教程

    Android 6.0采用的SPDY支持HTTP上GZIP壓縮的傳輸,這使得OkHttp包的功能能夠進(jìn)一步被利用,本文我們來總結(jié)一下Android M(6.0)使用OkHttp包解析和發(fā)送JSON請求的教程
    2016-07-07
  • Android如何繪制發(fā)光效果詳解

    Android如何繪制發(fā)光效果詳解

    這篇文章主要給大家介紹了關(guān)于Android如何繪制發(fā)光效果的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Flutter?Zone異常處理方法及基本原理

    Flutter?Zone異常處理方法及基本原理

    這篇文章主要為大家介紹了Flutter?Zone異常處理方法及基本原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Android XUtils3框架的基本使用方法(二)

    Android XUtils3框架的基本使用方法(二)

    這篇文章主要介紹了Android XUtils3框架的基本使用方法(二)的相關(guān)資料,需要的朋友可以參考下
    2016-08-08
  • 官網(wǎng)項目Jetpack?Startup庫學(xué)習(xí)

    官網(wǎng)項目Jetpack?Startup庫學(xué)習(xí)

    這篇文章主要為大家介紹了官網(wǎng)項目Jetpack?Startup庫學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Android Canvas自定義實現(xiàn)時鐘效果

    Android Canvas自定義實現(xiàn)時鐘效果

    這篇文章主要為大家詳細(xì)介紹了Android Canvas自定義實現(xiàn)時鐘效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12

最新評論