安卓rxjava内存泄漏

使用RxActivity的内存效果图,rxlifecycle2还是用作用的,可以看到使用的内存变小多了

private void createSingle() {
        Single<List<String>> tvShowSingle = Single.fromCallable(new Callable<List<String>>() {
            @Override
            public List<String> call() throws Exception {

                List<String> list =new ArrayList<String>();
                int i = 0;
                while (i < 800000) {
                    list.add(String.valueOf(i));
                    Log.d(TAG, String.valueOf(i));
                    i++;
                }
                return list;
            }
        });
        tvShowSingle
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .compose(this.bindToLifecycle())
                .subscribe(new DisposableSingleObserver<List<String>>() {
                    @Override
                    public void onSuccess(@NonNull List<String> strings) {
                            Log.d(TAG,"a35");
                        mTextView.setText(strings.size()+"");
                    }

                    @Override
                    public void onError(@NonNull Throwable e) {

                    }
                });
    }

创建一个比较耗内存测操作函数,如果使用正常的Activity的话,估计要64M的大小,提前把activiy finish掉,那么执行完后就会访问view的内容,此时view的内容为空

在oncreate的地方调用一个函数

createSingle();
finish();调用这个函数后会自动关闭activity界面,程序的界面退出后,但是后台的进程仍然没有关闭,仍然在运行,就是不停的打印日志出来。

程序的进程没有关闭掉,仍然在后台在运行着,一直占着内存资源,没有释放,没有使用.compose(this.bindToLifecycle()),内存一直维持在64M的大小一直不变,没有释放

时间: 2024-10-05 17:13:45

安卓rxjava内存泄漏的相关文章

Android性能优化之利用Rxlifecycle解决RxJava内存泄漏

前言: 其实RxJava引起的内存泄漏是我无意中发现了,本来是想了解Retrofit与RxJava相结合中是如何通过适配器模式解决的,结果却发现了RxJava是会引起内存泄漏的,所有想着查找一下资料学习一下如何解决RxJava引起的内存泄漏,就查到了利用Rxlifecycle开源框架可以解决,今天周末就来学习一下如何使用Rxlifecycle. 引用泄漏的背景: RxJava作为一种响应式编程框架,是目前编程界网红,可谓是家喻户晓,其简洁的编码风格.易用易读的链式方法调用.强大的异步支持等使得R

安卓中的内存泄漏

因为安卓是基于java语言的,所以我们先来看一看java中的内存泄漏,然后在此基础上来谈谈安卓中的内存泄漏. 一java中的内存泄漏: java中的内存泄漏主要是指在堆中分配的内存,明明已经不需要的时候,还仍然保留着访问它的引用,导致GC回收不能及时回收(关于GC回收不做过多赘述),导致这种情况出现的最主要原因是长生命周期的对象持有短生命周期对象的引用,导致短生命周期的对象明明已经不需要却无法被GC回收,从而导致内存泄漏.主要包括以下几种情况: 1在一个类中创建了一个非静态内部类的静态实例,如下

RxJava在Android中内存泄漏解决以及RxJava的封装

本文转自:http://blog.csdn.net/adzcsx2 RxJava在现在是一个非常前卫的异步框架,也是由于他非常新,所以比较难以驾驭. 像okhttp直接在onStop或者onDestroy 调用它的cancel方法就行了,但是Rxjava并没有那么简单. 因为假如每次请求都得到Observable对象,然后再onStop中unsubscribe取消,这样很不利于封装.而且会造成代码量很多,所以我找到了用rxlifecycle的解决方案. 先导包 compile 'com.trel

安卓 内存泄漏 MemoryAnalyzer

韩梦飞沙 yue31313 韩亚飞 han_meng_fei_sha [email protected] 需要 获取 root 权限 步骤: 1,使用eclipse 自带的 DDMS 工具分析各线程的内存使用情况,如下图所示 Heap视图界面会定时刷新,在对应用的不断的操作过程中就可以看到内存使用的变化. 怎样判断当前进程是否有内存泄漏呢? 这里需要注意一个值:VM Heap页面中部有一个data object选项,即数据对象,也就是我们的程序中大量存在的类类型的对象. 在data object

安卓 内存 泄漏 工具 LeakCanary 使用

韩梦飞沙 yue31313 韩亚飞 han_meng_fei_sha [email protected] LeakCanary是Square开源了一个内存泄露自动探测神器 .这是项目的github仓库地址:https://github.com/square/leakcanary  .使用非常简单,在build.gradle中引入包依赖: dependencies { debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5' rel

安卓性能测试之应用内存泄漏总结

pre { direction: ltr; color: rgb(0, 0, 10); text-align: left } pre.western { font-family: "Liberation Serif", serif; font-size: 12pt } pre.cjk { font-family: "Droid Sans Fallback"; font-size: 12pt } pre.ctl { font-family: "Droid S

安卓android WebView Memory Leak WebView内存泄漏

Android WebView Memory Leak WebView内存泄漏 在这次开发过程中,需要用到webview展示一些界面,但是加载的页面如果有很多图片就会发现内存占用暴涨,并且在退出该界面后,即使在包含该webview的Activity的destroy()方法中,使用webview.destroy();webview=null;对内存占回收用还是没有任何效果.有人说,一旦在你的xml布局中引用了webview甚至没有使用过,都会阻碍重新进入Application之后对内存的gc.包括

安卓常见引起内存泄漏的五种情况

1,单例引起的内存泄漏----解决办法 将context生命周期和application保持一致 public class SingletonAppliationContext {    private static SingletonAppliationContext instance;    private Context context;    private SingletonAppliationContext(Context context) {        this.context

Android性能优化之内存泄漏

综述 内存泄漏(memory leak)是指由于疏忽或错误造成程序未能释放已经不再使用的内存.那么在Android中,当一个对象持有Activity的引用,如果该对象不能被系统回收,那么当这个Activity不再使用时,这个Activity也不会被系统回收,那这么以来便出现了内存泄漏的情况.在应用中内出现一次两次的内存泄漏获取不会出现什么影响,但是在应用长时间使用以后,若是存在大量的Activity无法被GC回收的话,最终会导致OOM的出现.那么我们在这就来分析一下导致内存泄漏的常见因素并且如何