-
Notifications
You must be signed in to change notification settings - Fork 0
20160204分享
hexi edited this page Feb 4, 2016
·
12 revisions
###android画图时的碰到的问题 #####行情详情页进去视图显示比较慢,这是因为首先view的嵌套层级比较多,比如显示分时周期的时候会inflate k线的view,我的优化方法是将k线相关的view用ViewStub替换,在onCreateView的时候判断如果当前显示的是分时那么就不inflate k线的view。 #####画图时发现有延时,后来发现是因为我的更新操作block住了查询操作,后来研究了一下android sqlite。 sqlite是数据库级别的锁,而且SQLiteOpenHelper.getReadableDatabase()和SQLiteOpenHelper.getWritableDatabase()获取的是同一个SQLiteDatabase对象。 使用是要注意对于同一个数据库,并发的线程不能创建多个Database实例,不能关闭一个正在操作的database对象。 特性如下:
(1).数据库级别的锁,也就是说对一张表的事务操作会block住另一张表的操作。
(2).开启事务的更新操作的线程会阻塞查询操作的线程
(3).可以并发查询操作
(4).不开启事务的新增操作要比开启事务的新增操作更耗时。(同样都是新增2000条数据,开启事务耗时大概60毫秒,不开启事务耗时将近5秒)
###大象的交易模块需要计算最大手数
Observable<Fund> fundObservable = TradeApi.getFund().subscribeOn(Schedulers.io());
Observable<Result.ListResult<HoldingOrder>> holdingOrdersObservable = TradeApi.getHoldingOrders().subscribeOn(Schedulers.io());
Observable<Result.ListResult<DelegateOrder>> delegateOrdersObservable = TradeApi.getDelegateOrders().subscribeOn(Schedulers.io());
subscription = Observable.zip(fundObservable,
holdingOrdersObservable,
delegateOrdersObservable,
(Fund fund, Result.ListResult<HoldingOrder> holdingOrderListResult, Result.ListResult<DelegateOrder> delegateOrderListResult) -> {
CalcMaxVolumeParameter parameter = new CalcMaxVolumeParameter();
...
return parameter;
}).observeOn(AndroidSchedulers.mainThread())
.subscribe(new TradeSubscriber<CalcMaxVolumeParameter>() {
@Override
public void onError(TradeException e) {
Log.e(TAG, "~~~~~requestData error ", e);
}
@Override
public void onNext(CalcMaxVolumeParameter parameter) {
calcMaxVolumeParameter = parameter;
calcMaxVolume();
}
});
###交易api 之前是这样子的
public static TradeSubscription getFund(CallBack<Result.ListResult<Fund>> callBack) {
return TradeProxy.getInstance().sendRequest(buildPacket(Command.QUERY_FUND, buildParameter(null)), callBack);
}
之后是这样子的
public static Observable<Fund> getFund() {
Observable<Fund> observable = Observable.create(new Observable.OnSubscribe<Fund>() {
@Override
public void call(Subscriber<? super Fund> subscriber) {
final TradeCallback<Fund> callBack = new TradeCallback<Fund>(subscriber);
TradeProxy.getInstance().sendRequest(buildPacket(Command.QUERY_FUND, buildParameter(null)), callBack);
}
});
return observable;
}
public class TradeCallback<T extends Result> extends CallBack<T> {
private Subscriber<? super T> subscriber;
public TradeCallback(Subscriber<? super T> subscriber) {
this.subscriber = subscriber;
}
@Override
public void onSuccess(T result) {
subscriber.onNext(result);
subscriber.onCompleted();
}
@Override
public void onError(ErrorCode errorCode, String msg) {
subscriber.onError(new TradeException(errorCode, msg));
}
}
rxJava学习文档 http://gank.io/post/560e15be2dca930e00da1083
####过年回来我将对chart module进行重构,包括view层、数据层、和sqlite层。sqlite层将使用rx方式暴露接口。