第五单元rxpermissions,rxlifecycle的使用

rxpermissions的介绍

https://github.com/tbruyelle/RxPermissions?spm=a2c4e.10696291.0.0.44a719a4ahaTWq

注意安卓的版本号必须是rxjava的3.0的版本以后摸机器必须是26以上的. 并且模拟器8.0是有错误的.所以 直接9.0

导包

allprojects {
    
    
    repositories {
    
    
        ...
        maven {
    
     url 'https://jitpack.io' }
    }
}

dependencies {
    
    
    implementation 'com.github.tbruyelle:rxpermissions:0.10.2'
    implementation 'io.reactivex.rxjava2:rxjava:2.2.6'
    implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
}

代码

package com.fenghongzhang.rxpermission;

import androidx.appcompat.app.AppCompatActivity;

import android.Manifest;
import android.os.Bundle;
import android.util.Log;


import com.tbruyelle.rxpermissions2.Permission;
import com.tbruyelle.rxpermissions2.RxPermissions;

import io.reactivex.functions.Consumer;


public class MainActivity extends AppCompatActivity {
    
    
    final RxPermissions rxPermissions = new RxPermissions(this);

    private static final String TAG = "MainActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        //单个授权
        rxPermissions.request(new String[]{
    
    Manifest.permission.CALL_PHONE})
                    .subscribe(new Consumer<Boolean>() {
    
    
                        @Override
                        public void accept(Boolean aBoolean) {
    
    
                            Log.i(TAG, "accept: "+aBoolean);
                        }
                    });


//        //多个授权
//         rxPermissions.requestEach(new String[]{Manifest.permission.CALL_PHONE,Manifest.permission.READ_SMS})
//                 .subscribe(new Consumer<Permission>() {
    
    
//                     @Override
//                     public void accept(Permission permission) {
    
    
//                         if(permission.granted){
    
    
//                             Log.i(TAG, "accept: 同意");
//                         }else if(permission.shouldShowRequestPermissionRationale){
    
    
//                             Log.i(TAG, "accept: 不同意");
//                         }else{
    
    
//                             Log.i(TAG, "accept: 一直不同意");
//                         }
//                     }
//                 });

    }
}

RLifeCycle

https://github.com/trello/RxLifecycle

一:Rxlifecycle的作用
随着Android第三库的普及,RxJava(https://github.com/search?q=RxJava)和RxAndroid(https://github.com/ReactiveX/RxAndroid)越来越被人熟知,简洁的语法,配合Java8 Lambda表达式,使代码的结构更加清晰,通过线程调度器更容易控制和切换线程,种种优点,使用它的人也越来越多。但是使用不好,很容易导致内存泄露。

Rxlifecycle (https://github.com/trello/RxLifecycle)就使被用来严格控制由于发布了一个订阅后,由于没有及时取消,导致Activity/Fragment无法销毁导致的内存泄露。

具体要使用的版本,可在对应的GitHub中找到对应的版本。

二:Rxlifecycle使用
Activity/Fragment需继承RxAppCompatActivity/RxFragment,目前支持的有RxAppCompatActivity、RxFragment、RxDialogFragment、RxFragmentActivity。

导包


    implementation 'com.trello.rxlifecycle2:rxlifecycle:2.2.1'
    implementation 'com.trello.rxlifecycle2:rxlifecycle-android:2.2.1'
    implementation 'com.trello.rxlifecycle2:rxlifecycle-components:2.2.1'

注意看日志中的输出. 加入compose(bindUntilEvent(ActivityEvent.DESTROY)),关闭activity时,日志停止输出, 否则一直输出,内存泄漏了

代码

package com.fenghongzhang.rxpermission;

import androidx.appcompat.app.AppCompatActivity;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

import com.trello.rxlifecycle2.android.ActivityEvent;
import com.trello.rxlifecycle2.components.support.RxAppCompatActivity;

import java.util.concurrent.TimeUnit;

import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;


public class Main2Activity extends RxAppCompatActivity {
    
    

    private static final String TAG = "Main2Activity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        Observable.interval(1, TimeUnit.SECONDS)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .compose(bindUntilEvent(ActivityEvent.DESTROY))
                .subscribe(new Consumer<Object>() {
    
    
                    @Override
                    public void accept(Object o) throws Exception {
    
    
                        Log.i(TAG, "accept: ");
                    }
                });


    }
}

猜你喜欢

转载自blog.csdn.net/shuai_ge_feng/article/details/113767699
今日推荐