首页 >经济 > 正文

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是一个挺复杂的工具,这里就不讲原理了,直接用把,要做深层次功能的时候

就无法避免去多研究了,主要还是相互之间的关系把

责任编辑:

标签:

免责声明

头条新闻