-
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。 #####画图时发现有延时,后来发现是因为我的sql操作都在主线程,将主线程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();
}
});
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));
}
}