android消息推送demo

1.消息推送机制 
服务器器端需要变被动为主动,通知客户一些开发商认为重要的信息,无论应用程序是否正在运行或者关闭。 
我想到了一句话:don't call me,i will call you! 
qq今天在右下角弹出了一个对话框:"奥巴马宣布本拉登挂了...",正是如此。 
自作聪明,就会带点小聪明,有人喜欢就有人讨厌。 
2.独立进程 
无论程序是否正在运行,我们都要能通知到客户,我们需要一个独立进程的后台服务。 
我们需要一个独立进程的后台服务。 
在androidmanifest.xml中注册service时,有一个android:process属性,如果这个属性以"."开头,则为此服务开启一个 
全局的独立进程,如果以":"开头则为此服务开启一个为此应用私有的独立进程。举个具体的例子吧,我们新建了一个 
application,创建了主进程com.cnblogs.tianxia,那么: 
复制代码代码如下:
<!--下面会创建一个全局的com.cnblogs.tianxia.message的独立进程--> 
<service android:name=".service.messageservice" android:label="消息推送" android:process=".message" /> 
<!--或者--> 
<!--下面会创建一个应用私有的com.cnblogs.tianxia:message的独立进程--> 
<service android:name=".service.messageservice" android:label="消息推送" android:process=":message" /> 
我们没必要建立一个全局的,本文选择第二种方案,创建一个当前应用私有的独立进程。 
3.通知用户和点击查看 
public class messageservice extends service {

//获取消息线程 
private messagethread messagethread = null;

//点击查看 
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); 
}

/** 
* 从服务器端获取消息 

*/ 
class messagethread extends thread{ 
//运行状态,www.3ppt.com下一步骤有大用 
public boolean isrunning = true; 
public void run() { 
while(isrunning){ 
try { 
//休息10分钟 
thread.sleep(600000); 
//获取服务器消息 
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(); 



}

/** 
* 这里以此方法为服务器demo,仅作示例 
* @return 返回服务器要推送的消息,否则如果为空的话,不推送 
*/ 
public string getservermessage(){ 
return "yes!"; 

}

其中messageactivity是点击跳转的activity,负责处理查看详细信息。 
我们在其他activity中调用一下: 
复制代码代码如下:
boolean ismessagepush = true;//不开启就设置为false; 
... 
if(ismessagepush){ 
startservice(new intent(this, messageservice.class)) 
};

运行一下: 
4.停止服务 
1 stopservice(new intent(myactivity.this,messageservice.class)); 
2 setmessagepush(false);//设置配置文件或数据库中flag为false 
运行一下,停止服务后,却出乎意料的并没有停下来,怎么回事?是不是代码写错了? 
代码没有错,错在我们停止了服务,却没有停止进程,退出线程。 
5.退出线程 
实践证明,thread的stop()方法并不可靠。但是我们有其他的办法。 
在代码面前,程序员就是上帝。 
退出线程有两种方法。 
第一种方法,强制退出。 
//杀死该线程所在的进程,自然就退出了 
2 system.exit(0); 
第二种方法,设置isrunning为false。 
view sourceprint?1 //前面说到了isrunning这个标志,设置为false后,线程的执行就从while循环中跳出来了,然后自然结束 
掉了 
2 messagethread.isrunning = false; 
综合一下,我们在messageservice中重载ondestroy()方法如下: 
复制代码代码如下:
@override 
public void ondestroy() { 
system.exit(0); 
//或者,二选一,推荐使用system.exit(0),这样进程退出的更干净 
//messagethread.isrunning = false; 
super.ondestroy(); 
}

android消息推送demo相关推荐

  1. Android 消息推送

    Android 消息推送 那位大哥做过啊 android是用服务做吧? pushsharp 雲推送 你要有服務器來服務 不是云推送吧 去搜這個,有server,有client,有demo 自己做的话, ...

  2. Android 消息推送OnePush

    Android 消息推送 1.实现原理 1.消息推送的实质 实际上,是当服务器有新消息需推送给用户时,先发送给应用App,应用App再发送给用户 推送的消息一般是用户需要的或app希望用户知道的消息 ...

  3. 使用GCM服务(Google Cloud Messaging)实现Android消息推送

    最近在网上查了关于很多Android消息推送的资料,其中主要有四种方法. 1) 使用GCM服务(Google Cloud Messaging) 2) 使用XMPP协议(Openfire + Spark ...

  4. Android消息推送:手把手教你集成小米推送

    <script type="text/javascript" src="http://static.blog.csdn.net/scripts/category.j ...

  5. Android消息推送完美解决方案全析

    Android消息推送完美解决方案全析 参考文章: (1)Android消息推送完美解决方案全析 (2)https://www.cnblogs.com/xueshui20/p/4151405.html ...

  6. android 消息推送方法,一种基于Android系统的消息推送方法技术方案

    [技术实现步骤摘要] 本专利技术涉及一种基于Android系统的消息推送方法,属于计算机 技术介绍 推送功能在手机应用开发中越来越重要,已经成为手机开发的必选项.消息推送,就是在互联网上通过定期传送用 ...

  7. Android—消息推送机制

    知识点: 长连接与短连接 端内与端外推送 通知与透传消息 服务保活(心跳机制) 长连接和短连接 消息推送需要客户端与服务端进行连接,因此分为两种方式 长连接,在TCP层握手成功后,不立即断开连接,并在 ...

  8. Android消息推送 解决方案

    前言 鉴于现在运营需求的增强,消息推送在Android开发中应用的场景是十分常见 如电商的活动宣传.资讯类产品进行新闻推送等等 推送消息截图 今天,我将全面介绍Android中实现消息推送的7种主流解 ...

  9. WebSocket实现android消息推送

    WebSocket实现android消息推送 WebSocket是HTML5出的协议,基于TCP.它实现了浏览器与服务器全双工(full-duplex)通信--允许服务器主动发送信息给客户端. Web ...

最新文章

  1. python使用matplotlib可视化线图(line plot)、在可视化图像中的指定位置添加横线(add horizontal line in matplotlib plot)
  2. 通过minify将项目中js和css文件的打包
  3. 写一个能自动生成四则运算题目的软件,要求除了整数,还要支持正分数的四则运算。和同学们比较各自的程序功能、实现方法的异同。...
  4. Linux 中文件管理常用的工具
  5. 不懂编程可以自学python吗-我不会编程,也可能学会Python吗?
  6. maven error in opening zip file报错解决
  7. DevIL真是好用得想哭
  8. Linux 环境下 jdk1.8 maven3.2.3 Git2.8.0 安装脚本
  9. C# 规则引擎RulesEngine
  10. MyBatis collection的两种形式——MyBatis学习笔记之九
  11. 云场景实践研究第27期:袋鼠云
  12. linux装Oracle需要jdk,告诉你Ubuntu Linux下安装Oracle JDK的方法及命令
  13. ajax beforeSend中无效果
  14. IOS开发 ios7适配
  15. 菜鸟的IT道路ing (一)
  16. 修改linux kernel参数 semopm
  17. [转]SOAP 教程
  18. windows下MATLAB2016a安装配置
  19. 数据库 insert 数据的几种方式
  20. 【自动驾驶】浅谈自动驾驶在业界的发展

热门文章

  1. v兔无痕补单是什么,无痕补单搭配运营知识怎样玩,无痕补单的意义,哪里可以找到无痕补单
  2. first-child、last-child、nth-child( )失效问题
  3. html注册登录接口,API注册
  4. 【历史上的今天】3 月 15 日:世界上第一个互联网注册域名;Adobe 并购 Aldus;Skype 取代 MSN
  5. flex-warp换行后 间隔调整
  6. Java迷你Mp3播放器
  7. 如何编写无法维护的代码(现实中有的程序员就是这么干的)
  8. 网康防火墙--上线指南_在线付款接受指南-第1部分
  9. 校盈家学校财务收费管理软件,最适合学校财务收费的管理工具!
  10. 零基础搭建电影网站教程——二、运行环境