android 实时更新与通知 (android poll)
来源:互联网 发布:iebook软件下载 编辑:程序博客网 时间:2024/04/28 05:01
android 实时更新通常有两种方式:poll 和push的方式,push方式要优于poll方式,poll是客户端通过轮询的方式去服务
器端取数据的过程,轮询的时间设置体现了是否实时,设置过短可以做到一定的实时性,但是会手机电量,以及资源的
消耗。push方式可以做到真正的实时性,它是在服务器端有更新时,才通知到客户端。例如现在微信,QQ等的消息到
达通知,都是利用push技术。本实例主要简单的利用android poll 来实现消息的定时通
知。
下面会给出一个实例,该实例是通过在后台每隔一定的时间进行一次加1操作,实例中用到了service ,broadcast,
notification,以及java中的定时器(可以有其他的使用方法通过handler来实现),service就是在后台独立运行的组件,
它甚至可以一直运行下去,直到android内存空间不足把它回收。broadcast,就是广播,顾名思义,就是有新消息是,
将新消息广播出去(需要指定接收者),notification 就是当有新消息到达时,出现在手机左上角状态栏上的通知条,可
以对其进行声音,图标,标题等通知设置。下面给出简单示例。本实例只是简单显示消息及时更新发送通知的流程。可以在用户不在与应用交互时(或者说所有activity退出栈时)定时获得service的更新通知。
package com.qing.li;
import android.app.Activity;
import android.app.NotificationManager;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
/*显示更新的信息界面*/
public class TimingTaskActivity extends Activity {
private Intent intent;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.i("onCreate","onCreate");
Intent service =new Intent(this,CountingService.class);
startService(service);//启动service
intent =getIntent();
}
/* 已在AndroidManifest中设置launchMode为singleTask。
* 当本activity已存在栈中时,启动该Activity时,会回调该方法。 (non-Javadoc)
* @see android.app.Activity#onNewIntent(android.content.Intent)
*/
@Override
protected void onNewIntent(Intent intent) {
Log.i("onNewIntent","onNewIntent");
this.intent=intent;//新传递过来的intent,数据已变化
}
@Override
protected void onResume() {
super.onResume();
Log.i("onResume","onResume");
NotificationManager notificationManager =(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
notificationManager.cancel(0);
((TextView)findViewById(R.id.sum)).setText(intent.getStringExtra("sum"));
}
@Override
protected void onStop() {
super.onStop();
Log.i("onStop","onStop");
}
}
接下来的是一个计数service,当数据加1后会发个通知。
package com.qing.li;
import java.util.Timer;
import javax.security.auth.PrivateCredentialPermission;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
/*
* 通常在后台运行,即使activity关闭,service仍可执行
*/
public class CountingService extends Service {
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
Log.i("service","onCreate");
IntentFilter filter =new IntentFilter ("com.qing.li.service");
registerReceiver(receiver, filter);
Timer timer =new Timer();//创建定时器实例
timer.schedule(new CountingTask(this), 0, 10000); //每隔10秒执行一次任务
}
/*广播接收者*/
private BroadcastReceiver receiver =new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("receiver","receiver");
//获得notificationManager对象
NotificationManager notificationManager =(NotificationManager)
getSystemService(context.NOTIFICATION_SERVICE);
int icon =R.drawable.ic_launcher;//设置通知栏的图标
CharSequence tickerText="timing";
long when =System.currentTimeMillis();
Intent intent2 =new Intent(context,TimingTaskActivity.class);
intent2.putExtra("sum", intent.getStringExtra("sum"));
PendingIntent pendingIntent =PendingIntent.getActivity
(context, 0, intent2, PendingIntent.FLAG_CANCEL_CURRENT);
CharSequence from ="qing";
//实例化notification对象
Notification notification = new Notification(icon, tickerText, when);
notification.setLatestEventInfo(context, from,intent.getStringExtra("sum"), pendingIntent);
notificationManager.notify(0, notification);//发送通知
}
};
}
以下是个任务类。
package com.qing.li;
import java.util.TimerTask;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
/*
* 计算的任务
*/
public class CountingTask extends TimerTask{
private int sum =0;
private Context context;
public CountingTask(Context context) {
this.context = context;
}
@Override
public void run() {
Log.i("counting","excuted");
sum++;
Intent intent =new Intent ("com.qing.li.service");
intent.putExtra("sum", Integer.toString(sum));
this.context.sendBroadcast(intent);//数据更新,发送广播
}
public int getSum() {
return sum;
}
}
- android 实时更新与通知 (android poll)
- Android通知图库更新
- android 相册实时更新
- android发送通知及更新通知
- Android创建并更新通知栏通知
- 通知Android系统相册更新
- Android网络通信实时更新
- android weiget 实时数据更新
- android menu实时更新内容
- Android网络通信实时更新
- android 通知 手机 媒体 数据库 更新
- cocos2d-x C++通知Android更新UI
- Android APP 版本更新通知代码
- cocos2d-x c++通知android更新UI
- Android之动态更新通知栏
- Android之动态更新通知栏
- 主动通知Android系统图库进行更新
- Android之动态更新通知栏
- Mac地址
- 基于tcp的sockets的编程--客户机
- Hibernate详解(3)——一对一映射分析
- Java学习:构造函数特点
- 学习C语言- 第一步关键字特点方法(1)
- android 实时更新与通知 (android poll)
- SSIS-文本文件增加标题行
- WIN7 以管理员身份运行
- 杭电1042——求N!大数处理问题
- C语言学习之符号篇
- android自定义组件之TopMenu
- 类的构造函数调用其他构造函数
- s3c6410的RTC在linux中的驱动(3)
- 简单的文件读写函数举例