android 异步处理 天天最新
2023-06-13 20:54:07来源:哔哩哔哩
讲点简单的异步处理方法把,刷新页面,延迟刷新数据,定时任务有时候会用得到
android消息处理 最后面的delay 替换成毫秒值 (延时器)
(相关资料图)
new Handler().postDelayed(new Runnable(){
public void run() {
//execute the task
}
}, delay);
推荐使用这个 delay 直接改成毫米就好 不用东一块西一块
new Handler().postDelayed(new Runnable(){
public void run() {
//execute the task 执行代码放这里 刷新页面也行 执行其他函数也可以
}
}, delay);
线程
new Thread(new Runnable(){
public void run(){
Thread.sleep(XXXX);
handler.sendMessage();----告诉主线程执行任务
}
}).start();
延时器
TimerTask task = new TimerTask(){
public void run(){
//execute the task
}
};
Timer timer = new Timer();
timer.schedule(task, delay);
这些方法不用导第三方包,直接复制用就好
-----------------分割线----------------------------------------
再推荐一个更好一点的方法,不过使用起来有点复杂 RXJAVA2
先要导包,注意新版旧版的函数代码都会有更新,如果有冲突的话注意查看最新写法
compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.4@aar'
implementation 'io.reactivex.rxjava2:rxjava:2.0.7'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
// 示例 动态判断权限代码
RxPermissions rxPermissions=new RxPermissions(this);
rxPermissions.request(
anifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.CALL_PHONE,Manifest.permission.INTERNET)
.subscribe(new Consumer<Boolean>() {
@Override
public void accept(Boolean aBoolean) throws Exception {
if (aBoolean){
//申请的权限全部允许
Toast.makeText(B_Activity.this, "允许了权限!", Toast.LENGTH_SHORT).show();
}else{
//只要有一个权限被拒绝,就会执行
Toast.makeText(B_Activity.this, "未授权权限,部分功能不能使用", Toast.LENGTH_SHORT).show();
}
}
});
-----------------------------我是分割线----------------------------------------
导包 这个是:rxjava:1的 两者区分很大 留意了,最新的估计还有变化
compile 'com.tbruyelle.rxpermissions:rxpermissions:0.7.0@aar'
compile 'io.reactivex:rxjava:1.1.+'
compile 'io.reactivex:rxandroid:1.1.+'
RxPermissions.getInstance(this)
.request(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA) // 写入权限 和拍照权限
.subscribe(new Subscriber<Boolean>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
Log.e("权限错误", "e:" + e);
// Toast.makeText(mContext, "出现异常", Toast.LENGTH_SHORT).show();
showToast("请把存储权限打开");
}
@Override
public void onNext(Boolean aBoolean) {
if (!aBoolean) {
showToast("请把相机和存储权限打开");
return;
}
}
});
-----------------------------我是分割线----------------------------------------
还有这种,定时处理,可以设置次数 间隔时间 什么时候启动,记得添加这个就好 .observeOn(AndroidSchedulers.mainThread()) //切换线程 就这一个就够了
Observable.intervalRange(
0,//从1开始计数
3,//计时5次
0, //延时几秒开始
5, //每次间隔1
TimeUnit.SECONDS)//单位秒
.observeOn(AndroidSchedulers.mainThread()) //切换线程 就这一个就够了
.subscribe(new Consumer<Long>() {
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2)
@Override
public void accept(Long aLong) throws Exception {
Log.e("Link", "定时链接:执行代码放在这里" + aLong);
}
}
});
-----------------------------我是分割线----------------------------------------
还有这种 定时任务,当然你可以在需要的时候把他停掉,可操作性大了一点
重新打开的话要重新执行一次就是了,里面onError也有异常处理,可以统一
放在那里处理
d1[0].dispose();//停止任务调用这个 停止循环任务
final Disposable[] d1 = new Disposable[1];
Observable.interval(0, 1, TimeUnit.SECONDS)// 这里参数可以调整,自己试着调就好
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Long>() {
@Override
public void onNext(Long aLong) {
Log.e("LoginActivity", "aLong:" + aLong + mac);
}
@Override
public void onSubscribe(Disposable d) {
d1[0] = d;
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
-----------------------------我是分割线----------------------------------------
RXJAVA是一个挺复杂的工具,这里就不讲原理了,直接用把,要做深层次功能的时候
就无法避免去多研究了,主要还是相互之间的关系把
标签: