- 浏览: 668063 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
qinshubao152:
参考:http://www.see-source.com/bl ...
关于android USB Host 串口编程 -
q328965539:
哥们 我做的数据也都是错误的啊····我怎么可以知道自己otg ...
关于android USB Host 串口编程 -
hgkmail:
好文
android中跨进程通讯的4种方式 -
cczscq:
楼主,我这里有个问题!我这里有个自己制作的font.ttf,这 ...
android字体的工作原理 -
blueice1986:
既然springMVC比struts好那么多的话那struts ...
为什么有了Struts 还要Spring MVC
内存泄露处理
基本代码:
private final CompositeDisposable disposables = new CompositeDisposable();
public void doSomeWork2() {
// 1. 创建一个普通的 observable
Observable<String> observable = Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> e) throws Exception {
if (e.isDisposed()) return;
SystemClock.sleep(2000);
e.onNext("next");
e.onComplete();
}
});
// 2. 创建一个可被 CompositeDisposable 管理的 observer
DisposableObserver<String> observer = new DisposableObserver<String>() {
@Override
public void onNext(String value) {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
};
// 3. 订阅事件
observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer);
// 4. 将需要被 CompositeDisposable 管理的 observer 加入到管理集合中
disposables.add(observer);
}
在 Activity/Fragment 销毁生命周期中取消异步操作防止内存泄露:
@Override
protected void onDestroy() {
super.onDestroy();
// 将所有的 observer 取消订阅
disposables.clear();
}
在 mvp 的项目中处理内存泄露
基于 google todo-mvp-rxjava 搭建项目 mvp 框架:
BasePresenter :
public abstract class BasePresenter {
CompositeDisposable mCompositeDisposable = new CompositeDisposable();
public void unSubscribe() {
mCompositeDisposable.clear();
}
public void register(Disposable disposable) {
mCompositeDisposable.add(disposable);
}
}
一个例子 SimplePresenter extends BasePresenter :
public class SimplePresenter extends BasePresenter {
private static final String TAG = SimplePresenter.class.getSimpleName();
//...构造方法..
public void startWork() {
DisposableObserver<Long> observer = new DisposableObserver<Long>() {
@Override
public void onNext(Long value) {
Log.d(TAG, "onNext: ");
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
};
Observable.interval(2000, TimeUnit.MILLISECONDS)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer);
register(observer);
}
}
注意:在使用 RxJava 做异步操作的时候,调用 register(observer); 注册 observer 到 CompositeDisposable 中统一管理。
Activity/Fragment:
@Override
protected void onDestroy() {
super.onDestroy();
mSimplePresenter.unSubscribe();
}
慎用 functions
functions:Action,Consumer,Function 等
原因:这些方法只会对 onNext 事件进行处理,如果 observable 中出现异常产生了 onError 事件就会导致 app 奔溃。
解决方案:
不用简化方法
自己封装一个:
封装一个类似下面的基类:
public abstract class BaseDisposableObserver<T> extends DisposableObserver<T> {
private static final String TAG = BaseDisposableObserver.class.getSimpleName();
@Override
public void onError(Throwable e) {
Log.e(TAG, "onError: " + e.getMessage());
}
@Override
public void onComplete() {
}
}
使用的时候和 functions 是一样的:(这样下面的代码就不会导致app奔溃了)
BaseDisposableObserver<Long> baseDisposableObserver = new BaseDisposableObserver<Long>() {
@Override
public void onNext(Long value) {
Log.d(TAG, "onNext: ");
}
};
Observable.interval(2000, TimeUnit.MILLISECONDS)
.filter(new Predicate<Long>() {
@Override
public boolean test(Long aLong) throws Exception {
Log.d(TAG, "test: along:" + aLong);
if (aLong > 2) {
throw new Exception("sdf");
}
return true;
}
})
// .subscribeOn(Schedulers.io())
// .observeOn(AndroidSchedulers.mainThread())
.subscribe(baseDisposableObserver);
RxJava 看的还不多,如有错误还请指出
作者:Passon_Fang
链接:https://www.jianshu.com/p/b672724dbff8
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
基本代码:
private final CompositeDisposable disposables = new CompositeDisposable();
public void doSomeWork2() {
// 1. 创建一个普通的 observable
Observable<String> observable = Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> e) throws Exception {
if (e.isDisposed()) return;
SystemClock.sleep(2000);
e.onNext("next");
e.onComplete();
}
});
// 2. 创建一个可被 CompositeDisposable 管理的 observer
DisposableObserver<String> observer = new DisposableObserver<String>() {
@Override
public void onNext(String value) {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
};
// 3. 订阅事件
observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer);
// 4. 将需要被 CompositeDisposable 管理的 observer 加入到管理集合中
disposables.add(observer);
}
在 Activity/Fragment 销毁生命周期中取消异步操作防止内存泄露:
@Override
protected void onDestroy() {
super.onDestroy();
// 将所有的 observer 取消订阅
disposables.clear();
}
在 mvp 的项目中处理内存泄露
基于 google todo-mvp-rxjava 搭建项目 mvp 框架:
BasePresenter :
public abstract class BasePresenter {
CompositeDisposable mCompositeDisposable = new CompositeDisposable();
public void unSubscribe() {
mCompositeDisposable.clear();
}
public void register(Disposable disposable) {
mCompositeDisposable.add(disposable);
}
}
一个例子 SimplePresenter extends BasePresenter :
public class SimplePresenter extends BasePresenter {
private static final String TAG = SimplePresenter.class.getSimpleName();
//...构造方法..
public void startWork() {
DisposableObserver<Long> observer = new DisposableObserver<Long>() {
@Override
public void onNext(Long value) {
Log.d(TAG, "onNext: ");
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
};
Observable.interval(2000, TimeUnit.MILLISECONDS)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer);
register(observer);
}
}
注意:在使用 RxJava 做异步操作的时候,调用 register(observer); 注册 observer 到 CompositeDisposable 中统一管理。
Activity/Fragment:
@Override
protected void onDestroy() {
super.onDestroy();
mSimplePresenter.unSubscribe();
}
慎用 functions
functions:Action,Consumer,Function 等
原因:这些方法只会对 onNext 事件进行处理,如果 observable 中出现异常产生了 onError 事件就会导致 app 奔溃。
解决方案:
不用简化方法
自己封装一个:
封装一个类似下面的基类:
public abstract class BaseDisposableObserver<T> extends DisposableObserver<T> {
private static final String TAG = BaseDisposableObserver.class.getSimpleName();
@Override
public void onError(Throwable e) {
Log.e(TAG, "onError: " + e.getMessage());
}
@Override
public void onComplete() {
}
}
使用的时候和 functions 是一样的:(这样下面的代码就不会导致app奔溃了)
BaseDisposableObserver<Long> baseDisposableObserver = new BaseDisposableObserver<Long>() {
@Override
public void onNext(Long value) {
Log.d(TAG, "onNext: ");
}
};
Observable.interval(2000, TimeUnit.MILLISECONDS)
.filter(new Predicate<Long>() {
@Override
public boolean test(Long aLong) throws Exception {
Log.d(TAG, "test: along:" + aLong);
if (aLong > 2) {
throw new Exception("sdf");
}
return true;
}
})
// .subscribeOn(Schedulers.io())
// .observeOn(AndroidSchedulers.mainThread())
.subscribe(baseDisposableObserver);
RxJava 看的还不多,如有错误还请指出
作者:Passon_Fang
链接:https://www.jianshu.com/p/b672724dbff8
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
发表评论
-
AndroidStudio无法执行Java的main函数
2021-03-25 10:10 697FAILURE: Build failed with an e ... -
最近github经常打不开解决办法
2021-03-23 21:43 2https://zhuanlan.zhihu.com/p/15 ... -
android studio 各个历史版本下载
2021-03-15 16:51 1501android studio 各个历史版本下载 https: ... -
pod install 的历程
2021-01-27 09:34 340公司ios项目拉下来执行有报错,建议执行pod install ... -
Android Studio Database Inspector 使用
2021-01-22 15:24 521转:https://segmentfault.com/a/ ... -
kotlin学习
2021-01-05 10:26 294转 https://blog.csdn.net/github_ ... -
Flutter upgrade升级一直停留在 Running pub upgrade...
2020-10-26 10:15 1028win10 下配置 最后用国内镜像解决了。方法: 1、计算机 ... -
什么是MVVM模式的架构?
2020-10-20 12:14 464转自:https://www.jianshu.com/p/a8 ... -
原生开发、H5开发和混合开发的优缺点
2020-06-04 15:20 479目前市场上主流的APP分为三种:原生APP、Web APP( ... -
flutter填坑——解决ListView添加在Scaffold上默认的的top-padding
2020-01-11 15:09 567解决方法 把ListView用MediaQuery.remo ... -
Flutter开发环境搭建——Ubuntu
2019-09-02 18:10 401配置完做下记录 准备,加快下载速度 由于在国内访问Flutt ... -
原 android view相对于根布局的坐标获取
2019-05-10 11:09 884一张图就看懂了,附件 -
认识一下 Emoji
2019-03-26 15:07 608https://www.cnblogs.com/plokmju ... -
ubuntu批量修改文件名字(换动画资源必用)
2019-03-23 15:28 806for file_old in `ls | grep 原来的 ... -
ubuntu连接android设备(附最简单方法)
2019-03-14 10:35 869新买的手机IQOO后,连不上adb,显示数字加null,所以看 ... -
解决 Configure build 下载慢的问题(亲测有效)
2019-03-09 23:11 3070在build.gradle 文件加入下面代码即可 buil ... -
记录下ubuntu下studio安装flutter
2019-03-09 11:37 1244一、安装Flutter的SDK及环境配置 1、访问官网,下载S ... -
Flutter与React Native
2019-03-06 17:58 919Flutter 与React Native 对比 [关于性 ... -
论开发框架的选择MVP,RxFlux2,Rxjava,Dagger2或在不需要
2018-08-31 10:23 954为什么要使用框架 使用框架,是为了提高生产效率。 框架就是 ... -
不继承RxAppCompatActivity的情况下使用RxLifeCycle
2018-08-29 10:07 2030在Android中使用Rxjava时可能会在页面退出时出现内存 ...
相关推荐
前言 RxJava2、Retrofit2火了有一段... RxJava2内存泄漏的处理 异步请求加入Loading Dialog 依赖 implementation 'io.reactivex.rxjava2:rxandroid:2.0.1' implementation 'io.reactivex.rxjava2:rxjava:2.1.3' i
RxLifeCycle可以有效处理Activity和Fragment的生命周期,并防止内存泄漏。 但是,RxLifeCycle尊重运算符。 因此,它的行为与取消/处置不同。 特别是Single + TakeUntil将调用onError(CancellationException)。 ...
Rx-Mvp ...使用 RxLifecycle2 管理生命周期,再也不用担心 RxJava 使用不当造成内存泄漏 基础网络请求,数据转换为 String 并提供 onConvert 方法提供开发者自定义转化数据 上传带进度回调,多文件情况下
此功能在 Android 中很有用,因为不完整的订阅会导致内存泄漏。 你必须从一个 Observable 开始表示生命周期流。 然后使用 RxLifecycle 将序列绑定到该生命周期。 它假设您想在相反的生命周期事件中结束序列——例如...
默认情况下,对于 RxJava 1.x 未处理的每个错误, 将抛出一个包装在IllegalStateException的OnErrorNotImplemented异常,或者如果您使用的是 2.0.6 版之前的 RxJava 2.x,则会直接调用默认的未捕获异常处理程序。...
RxJava中一个常用的使用方法是——在其他线程中做处理,然后切换到UI线程中去更新页面。其中,线程切换就是使用了observeOn()。后台下载文件,前台显示下载进度就可以使用这种方式完成。然而,实践发现这其中有坑。...
此功能在Android中很有用,因为其中不完整的订阅可能会导致内存泄漏。 用法 您必须从表示生命周期流的Observable开始。 然后,您可以使用RxLifecycle将序列绑定到该生命周期。 您可以在生命周期发出任何东西时进行...
android—mvp+retrofit+rxjava+okhttp的demo ,封装baseActivity BaseView BasePresenter处理解决内存泄漏
MVP_demo 本文主要根据自身项目的使用和对MVP的理解,搭建符合自身项目情况的MVP架构。 关于MVP M(Model)负责数据的请求,解析,过滤等数据操作。...把业务逻辑抽到Presenter中去,避免复杂业务逻辑造成的内存泄漏。
无需担心rx内存泄漏 适配AndroidX,请前往android-x分支 保留: 提供XActivity、XFragment、SimpleRecAdapter、SimpleListAdapter等基类,可快速进行开发 完整封装XRecyclerView,可实现绝大部分需求 ...
:防止RxJava中subscription导致内存泄漏 :基于RxJava开发的用于帮助在Android 6.0中处理运行时权限检测 :目前最好用的网络通讯库,应该都用过吧 :okhttp和retrofit做网络通讯是绝配 :ORM数
Meteorite.zip,这个项目涉及到如下技术的实际应用:1、MVP 2、网络请求(Novate基于rxjava,okhttp,retrofit封装架构)3、DbFlow(可保存文件入SD卡) 4、6.0权限申请 5、XRecyclerView 6、万能Adapter7、异常处理 8、...
MVVMLin 一个基于MVVM用Kotlin+Retrofit+协程+Databinding(View...使用Rxjava 处理不好的话会有内存泄露的风险,我们会用使用AutoDispose、RxLifecycle等方式来处理,但是使用协程来请求数据,完全不用担心这个问题,
#XDroidMvp轻量级的Android MVP快速开发框架 概述 ...无需担心rx内存泄漏 适应AndroidX,请前往android-x分支 保留: 提供XActivity , XFragment , SimpleRecAdapter , SimpleListAdapter等基类,
使用LiveData,ViewModel,LifecycleObserver和LifecycleOwner进行有效的配置更改,避免内存泄漏,并轻松将数据加载到UI中。 会议室:SQLite对象映射库 避免使用样板代码,并使用Room轻松将SQLite表数据转换为Java...
<Kotlin>>接口参考项目截图 更新日志v1.0.0大致框架完成,精选-发现-我的感谢以下开源库日志多状态切换view内存泄漏检查刷新库权限检查图片处理图片轮播 https://github.com/bingoogolapple/BGABanner-Android底部...