业务背景: 海量高频数据(如股票实时报价), 更新的规则: 被更新的对象和更新方法都不一样.
下面是部分实例代码,最后一个是模拟的数据更新。
public interface CommonDefn {
public static int HIGHLIGHT_BACKGROUND_COLOR_INDEX = 0xff0033ff;
public class DoThingsReturn{
public Object cmd;
public Object data;
public int errCode;
public DoThingsReturn(Object cmd, Object data, int errorCode) {
super();
this.cmd = cmd;
this.data = data;
this.errCode = errorCode;
}
}
}
/**
* used for updating the background of the view while the data changed
*
*
*/
public interface RefreshHandlerInterface {
public void updateBackground(Object handlerId, int color); //the proxy updating method
public Handler getHandler(); //the proxy handler
}
/**
*
* decrease alpha channel value from 255 to 0.
*
*/
public class ColorRefreshTask extends TimerTask {
private RefreshHandlerInterface refreshHandler;
private final static int DELAY_ONCE =200;
private final static int TOTAL_RUNTIME = 1500;
private final static int POWER_16_16 = 16 * 16* 16 * 16 * 16 * 16;
private final static int INCREASE_ONCE = 0xff / (TOTAL_RUNTIME / DELAY_ONCE);
private int color;
private Object id;
private int startTime;
private int alphaChannel;
/**
*
* @param color ( current background color)
* @param id id of the updated view
*/
public ColorRefreshTask(RefreshHandlerInterface refreshHandler, int color, Object id) {
super();
Log.d("color", "ready to set color!");
this.color = color;
this.id = id;
this.startTime = 0;
this.alphaChannel = 0;
this.refreshHandler = refreshHandler;
}
public void run(){
int colorComm = color - 0xff000000; //RGB color value;
int currColor = 0;
if(startTime < TOTAL_RUNTIME) {
startTime += DELAY_ONCE;
alphaChannel += INCREASE_ONCE;
currColor = POWER_16_16 * alphaChannel + colorComm;
//Log.d("color", Integer.toHexString(currColor));
sendMsg(currColor);
refreshHandler.getHandler().postDelayed(this,DELAY_ONCE);
}
else {
sendMsg(currColor <= color ? color : 0 );
cancel();
}
}
public void startTimer(){
refreshHandler.getHandler().postDelayed(this,DELAY_ONCE);
}
private void sendMsg(final int currColor){
final Runnable myUpdateResults = new Runnable() {
public void run() {
refreshHandler.updateBackground( id, currColor);
}
};
new Thread() {
public void run() {
refreshHandler.getHandler().post(myUpdateResults);
}
}.start();
}
public void stopTimer(){
this.cancel();
}
}
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.TextView;
public class TestActivity extends Activity implements RefreshHandlerInterface{
private Handler _messageHandler = new Handler();
@Override
public Handler getHandler() {
return _messageHandler;
}
@Override
public void updateBackground(Object handlerId, int color) {
if(!( handlerId instanceof CommonDefn.DoThingsReturn)) {
return; //invalid parameter
}
else {
TextView current = (TextView)(((CommonDefn.DoThingsReturn)handlerId).data);
if(current.getVisibility() != View.VISIBLE) {
return; //no need to update for the view
}
if(color<=0) {
current.setBackgroundDrawable(null);
current.setText(((CommonDefn.DoThingsReturn)handlerId).cmd.toString());
}
else {
current.setBackgroundColor( color);
}
current.postInvalidate();
}
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final TextView tv = (TextView)findViewById(R.id.txtview);
new Thread() {
java.util.Random rand = new java.util.Random();
long lastUpdate = System.currentTimeMillis();
public void run() {
while(!Thread.interrupted() || !TestActivity.this.isFinishing()) {
//模拟高频更新数据
if( System.currentTimeMillis() - lastUpdate < 2000l) { //设置两次动画的最少间隔时间
continue;
}
else
lastUpdate = System.currentTimeMillis();
CommonDefn.DoThingsReturn updateWrapper = new CommonDefn.DoThingsReturn(String.valueOf(rand.nextInt()) , tv,0);
ColorRefreshTask refresh = new ColorRefreshTask(TestActivity.this,CommonDefn.HIGHLIGHT_BACKGROUND_COLOR_INDEX, updateWrapper);
_messageHandler.postDelayed(refresh, 200); //ready to for the current updating
}
}
}.start();
}
}
这也也打包了,需要的可以看一下。
分享到:
相关推荐
通过使用R语言及其“highfrequency”包,我们可以有效地处理金融市场的高频数据,进而进行深入的市场分析和策略开发。高频数据的应用领域广泛,包括但不限于股票买卖报价的动态性分析、市场流动性的评估、算法交易...
- **海量数据排序与统计**:面对大量数据的频度排序,可以使用MapReduce框架进行分布式计算,将任务分解至多台服务器并行处理。 - **高频率词的识别**:在有限内存条件下,通过滑动窗口与哈希表结合的技术来识别高频...
用R语言进行高频数据分析,讲解通俗易通,条理清晰,能使读者快速入门
中国宏观经济高频数据手册20220415.xlsx中国宏观经济高频数据手册20220415.xlsx中国宏观经济高频数据手册20220415.xlsx中国宏观经济高频数据手册20220415.xlsx
【压缩包子文件的文件名称列表】:其中的“高频金融数据的研究现状及展望.doc”文档,预示着它将详细探讨高频金融数据的最新研究成果,包括数据采集技术、处理方法、市场微观结构分析、统计模型的应用,以及这些数据...
在本项目中,我们主要探讨的是使用MATLAB进行高频数据的预测分析,特别是针对EFTSe100指数。MATLAB是一种强大的编程环境,广泛应用于数值计算、数据分析和建模,尤其适合处理复杂的金融问题。这里,我们将研究如何...
3.2 用代理模式处理海量高频数据更新 在处理大量数据时,代理模式可以提高性能和效率,避免直接操作数据导致的性能瓶颈。 3.3 Android中媒体播放器部分的架构 讲解了Android如何处理多媒体文件的播放,涉及...
海通证券发布的这篇报告探讨了如何利用高频数据来跟踪和分析公募基金在核心资产上的持仓变化。高频数据指的是以高频率收集和分析的数据,这在金融市场分析中具有重要的应用价值。本报告首先回顾了之前的研究成果,并...
沪深300股指期货2011年1月4日至2019年12月31日的5分钟高频交易数据,包括收盘价、最高价、最低价、开盘价、交易量以及交易额等数据
本篇文章将深入探讨如何使用R语言获取沪深股市的高频数据和股指数据,为你的投资决策提供科学依据。 首先,我们需要了解R语言中用于处理金融数据的主要包,如`quantmod`、`tseries`、`FinancialInstrument`、`...
在应用高频数据进行持仓跟踪的过程中,首先需要处理的是海量的交易数据。这些数据包括交易价格、成交量和精确至秒的时间戳等。数据处理与清洗是基础,确保数据质量对于后续分析至关重要。随后,采用时间序列分析、...
标题“20130405_批量下载高频IGS站数据_”指的是一个关于在2013年4月5日进行的...这些脚本的使用需要一定的Linux和GNSS数据处理知识,但它们为研究者提供了一个高效的方式来获取和准备用于地球动力学分析的宝贵数据。
- 对于海量日志数据,首先筛选出特定日期访问百度的IP,然后使用类似的方法(如模运算)将IP分散到多个小文件,统计每个文件中IP的出现频率,找出最高频的IP。 这些方法的核心思想是通过哈希函数、分布式计算、...
标题中的“高频数据 SH000004-----分笔交易”指的是针对上海交易所工业指数(SH000004)的一种特定交易数据类型,即高频数据的分笔交易记录。高频数据是指在短时间内收集的大量交易数据,通常涵盖每笔交易的详细信息...
- **数据处理能力**:海量高频数据需要强大的计算资源和高效的处理方法。 - **噪声过滤**:高频数据可能存在噪音,需要有效的方法进行清洗和信号提取。 - **法规限制**:不同市场的监管环境对高频交易有不同规定...
随着科技的进步和数据采集技术的飞速发展,越来越多的领域需要处理海量数据。这些数据通常包括各种参数的记录,随着时间的推移形成海量的参数曲线。传统数据处理软件在面对这种大数据量时往往捉襟见肘,处理效率低下...