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: ");
}
});
}
}