- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Android中利用App实现消息推送机制的代码由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
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中利用App实现消息推送机制的代码的文章就讲到这里了,如果你想了解更多关于Android中利用App实现消息推送机制的代码的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我需要将文本放在 中在一个 Div 中,在另一个 Div 中,在另一个 Div 中。所以这是它的样子: #document Change PIN
奇怪的事情发生了。 我有一个基本的 html 代码。 html,头部, body 。(因为我收到了一些反对票,这里是完整的代码) 这是我的CSS: html { backgroun
我正在尝试将 Assets 中的一组图像加载到 UICollectionview 中存在的 ImageView 中,但每当我运行应用程序时它都会显示错误。而且也没有显示图像。 我在ViewDidLoa
我需要根据带参数的 perl 脚本的输出更改一些环境变量。在 tcsh 中,我可以使用别名命令来评估 perl 脚本的输出。 tcsh: alias setsdk 'eval `/localhome/
我使用 Windows 身份验证创建了一个新的 Blazor(服务器端)应用程序,并使用 IIS Express 运行它。它将显示一条消息“Hello Domain\User!”来自右上方的以下 Ra
这是我的方法 void login(Event event);我想知道 Kotlin 中应该如何 最佳答案 在 Kotlin 中通配符运算符是 * 。它指示编译器它是未知的,但一旦知道,就不会有其他类
看下面的代码 for story in book if story.title.length < 140 - var story
我正在尝试用 C 语言学习字符串处理。我写了一个程序,它存储了一些音乐轨道,并帮助用户检查他/她想到的歌曲是否存在于存储的轨道中。这是通过要求用户输入一串字符来完成的。然后程序使用 strstr()
我正在学习 sscanf 并遇到如下格式字符串: sscanf("%[^:]:%[^*=]%*[*=]%n",a,b,&c); 我理解 %[^:] 部分意味着扫描直到遇到 ':' 并将其分配给 a。:
def char_check(x,y): if (str(x) in y or x.find(y) > -1) or (str(y) in x or y.find(x) > -1):
我有一种情况,我想将文本文件中的现有行包含到一个新 block 中。 line 1 line 2 line in block line 3 line 4 应该变成 line 1 line 2 line
我有一个新项目,我正在尝试设置 Django 调试工具栏。首先,我尝试了快速设置,它只涉及将 'debug_toolbar' 添加到我的已安装应用程序列表中。有了这个,当我转到我的根 URL 时,调试
在 Matlab 中,如果我有一个函数 f,例如签名是 f(a,b,c),我可以创建一个只有一个变量 b 的函数,它将使用固定的 a=a1 和 c=c1 调用 f: g = @(b) f(a1, b,
我不明白为什么 ForEach 中的元素之间有多余的垂直间距在 VStack 里面在 ScrollView 里面使用 GeometryReader 时渲染自定义水平分隔线。 Scrol
我想知道,是否有关于何时使用 session 和 cookie 的指南或最佳实践? 什么应该和什么不应该存储在其中?谢谢! 最佳答案 这些文档很好地了解了 session cookie 的安全问题以及
我在 scipy/numpy 中有一个 Nx3 矩阵,我想用它制作一个 3 维条形图,其中 X 轴和 Y 轴由矩阵的第一列和第二列的值、高度确定每个条形的 是矩阵中的第三列,条形的数量由 N 确定。
假设我用两种不同的方式初始化信号量 sem_init(&randomsem,0,1) sem_init(&randomsem,0,0) 现在, sem_wait(&randomsem) 在这两种情况下
我怀疑该值如何存储在“WORD”中,因为 PStr 包含实际输出。? 既然Pstr中存储的是小写到大写的字母,那么在printf中如何将其给出为“WORD”。有人可以吗?解释一下? #include
我有一个 3x3 数组: var my_array = [[0,1,2], [3,4,5], [6,7,8]]; 并想获得它的第一个 2
我意识到您可以使用如下方式轻松检查焦点: var hasFocus = true; $(window).blur(function(){ hasFocus = false; }); $(win
我是一名优秀的程序员,十分优秀!