Skip to content
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方式暴露接口。

Clone this wiki locally