Android 通过Service单独进程模仿离线推送 Se

来源:本站
导读:目前正在解读《Android 通过Service单独进程模仿离线推送 Se》的相关信息,《Android 通过Service单独进程模仿离线推送 Se》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《Android 通过Service单独进程模仿离线推送 Se》的详细说明。
简介:首先简单阐述一下我对于消息推送的理解,这里拿QQ来举例吧,当我们手机端的QQ离线了,并且退出了QQ应用,但是这时候如果别人给我们发了信息,我们没有上线。服务器会将发送者发送的信息推送过来然后我们发布通知来显示通知我们的用户

概述:

首先简单阐述一下我对于消息推送的理解,这里拿QQ来举例吧,当我们手机端的QQ离线了,并且退出了QQ应用,但是这时候如果别人给我们发了信息,我们没有上线。服务器会将发送者发送的信息推送过来然后我们发布通知来显示通知我们的用户

原理简单阐述:

通过以上概述,我们基本了解我们需要一个独立进程的后台服务,在AndroidManifest

.xml中注册Service时,有一个android:process属性这个属性有2种情况,即为.和:两种,其中.代表为此服务开启一个全局的独立进程,如果以:开头则为此服务开启一个为此应用私有的独立进程

编码实现:

ServerPushService文件:

01<strong>importandroid.app.Notification;02importandroid.app.NotificationManager;03importandroid.app.PendingIntent;04importandroid.app.Service;05importandroid.content.Intent;06importandroid.os.IBinder;0708publicclassServerPushServiceextendsService{09//获取消息线程10privateMessageThread messageThread =null;11//点击查看12privateIntent messageIntent =null;13privatePendingIntent messagePendingIntent =null;14//通知栏消息15privateintmessageNotificationID =1000;16privateNotification messageNotification =null;17privateNotificationManager messageNotificationManager =null;18@Override19publicIBinder onBind(Intent intent) {20returnnull;21}22@Override23publicintonStartCommand(Intent intent,intflags,intstartId) {24//初始化25messageNotification =newNotification();26messageNotification.icon = R.drawable.ic_launcher;//通知图片27messageNotification.tickerText ="新消息";//通知标题28messageNotification.defaults = Notification.DEFAULT_SOUND;29messageNotificationManager = (NotificationManager) getSystemService(this.NOTIFICATION_SERVICE);30//点击查看31messageIntent =newIntent(this,MessageActivity.class);32messagePendingIntent = PendingIntent.getActivity(this,0, messageIntent,0);33//开启线程34MessageThread thread =newMessageThread();35thread.isRunning =true;36thread.start();37returnsuper.onStartCommand(intent, flags, startId);38}3940/***41* 从服务端获取消息42* @author zhanglei43*44*/45classMessageThreadextendsThread{46//运行状态47publicbooleanisRunning =true;48@Override49publicvoidrun() {50while(isRunning){51try{52//休息10秒53Thread.sleep(10000);54if(getServerMessage().equals("yes")){55//设置消息内容和标题56messageNotification.setLatestEventInfo(ServerPushService.this,"您有新消息!","这是一条新的测试消息", messagePendingIntent);57//发布消息58messageNotificationManager.notify(messageNotificationID, messageNotification);59//避免覆盖消息,采取ID自增60messageNotificationID++;61}62}catch(Exception e) {63e.printStackTrace();64}65}66}67}68/***69* 模拟了服务端的消息。实际应用中应该去服务器拿到message70* @return71*/72publicString getServerMessage(){73return"yes";74}75} </strong>

注册该service在一个单独的进程中

1<strong><!-- 为此应用私有的独立进程 -->2<service3android:name="com.jay.serverpush.ServerPushService"4android:process=":message"5>6</service> </strong>

说明:该文件编写了一个service用于后台运行,在manifest里面将该service声明成progress为:开头的,这样在一个单独的进程里面运行,以实现在程序关闭之后达到进程不关闭的目的以此来实现离线推送的目的,编码中的注释很明确,扫描服务器、判断逻辑发布通知等,注释很明确在此不在阐述

1<strong>@Override2protectedvoidonCreate(Bundle savedInstanceState) {3super.onCreate(savedInstanceState);4setContentView(R.layout.activity_main);5this.startService(newIntent(this,ServerPushService.class));6}789this.startService(newIntent(this,ServerPushService.class)); </strong>

通过这句话在第一次进入oncreate方法就开启了单独进程的服务

提醒:《Android 通过Service单独进程模仿离线推送 Se》最后刷新时间 2024-03-14 01:06:59,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《Android 通过Service单独进程模仿离线推送 Se》该内容的真实性请自行鉴别。