Android 后台线程Thread调用前台线程Handler,延时线程,runOnUiThread使用,Timer延时,定时循环,倒计时

 UI线程

/**
 * 发送message
 */
public static void sendMessage(int what, Object obj, Handler mHandler) {
    Message msg = new Message();
    msg.what = what;
    if (obj != null) {
        msg.obj = obj;
    }
    mHandler.sendMessage(msg);
}

 发送

AppUtils.sendMessage(1, object, mHandler);

 接收

Handler mHandler = new Handler(Looper.getMainLooper()) {
    public void handleMessage(Message msg) {
        switch (msg.what) {
            case 1://获取设备录音列表
                mListAudio = (ListAudioDto) msg.obj;
                updateUI(mListAudio);
                break;
            case 2://Toast处理
                AppToast.showNetWrong(F01RecodeListActivity.this, String.valueOf(msg.obj));
                break;
            case 3:
                List<String> filesSuccess=(List<String>) msg.obj;
                addRecode(filesSuccess);
                break;
            default:
                break;
        }
    }

};

 全局延时

Handler mHandler=new Handler(Looper.getMainLooper());
mHandler.postDelayed(new Runnable() {
    @Override
    public void run() {
        setRecodeViews(2);
    }
},WavMergeUtil.getWavLength(getFilename()));

 清空

mHandler.removeCallbacksAndMessages(null);

 

 

 间隔时间

long exitTime = 0;

if ((System.currentTimeMillis() - exitTime) > 5500) {
    exitTime = System.currentTimeMillis();
    startActivity(new Intent(MainActivity.this,ViewActivity.class));

}else {
    return;
}

延时 

try {
    Thread.sleep(1000);
} catch (InterruptedException e) {
    e.printStackTrace();
}

//延时3秒
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
    public void run() {
        PetfunAddDevSuccess();
    }

}, 3 * 1000);

App.getInstance().runOnUiThread(new Runnable() {
    @Override
    public void run() {
        GlideUtil.setOrginalPic(App.getGameResponse.logo,logimg);
    }
});

SystemClock.sleep(800);
App.getInstance().getUIHandler().postDelayed(dataViewPresentation::show,1000);
final Timer timer =new Timer();
timer.schedule(new TimerTask() {//延时,定时循环
    @Override
    public void run() {
        LogPlus.e("lgq","收尾。。show。。");
        toast.show();
        timer.cancel();
    }
},2000,3000);
new Timer().schedule(new TimerTask() {//倒计时
    @Override
    public void run() {
        toast.cancel();
        timer.cancel();
    }
}, cnt );

Handler handler = new Handler();
handler.postDelayed(new Runnable() {
    @Override
    public void run() {
        startActivity(PayBannerActivity.class);
        setResult(RESULT_OK);
        finish();
    }
}, 1500);

new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
    public void run() {
        Log.e("lgq","延时。。。");
        Toast.makeText(MainActivity.this,"saa",1).show();

    }
}, 3000);

调用UI线程更新UI 

   private void setTips(String s) {
        if (this == null) {
            return;
        }

//        runOnUiThread(() -> {
//            textView.setText(s);
//        });
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                textView.setText(s);
            }
        });

    }

创建前台线程

    static final int REFRESH_COMPLETE = 0X1112;
    private Handler mHandler = new Handler() {
        public void handleMessage(android.os.Message msg) {
            switch (msg.what) {
                case REFRESH_COMPLETE:
//todo...
                    break;
            }
        }
    };

后台线程调用前台线程,循环线程

new Thread() {
    @Override
    public void run() {
        super.run();

        running = true;
        int i = 0;
        while (running) {
            mHandler.sendEmptyMessageDelayed(REFRESH_COMPLETE, 1000);
            try {
                sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}.start();

new Thread() {
    @Override
    public void run() {
        super.run();

        boolean running = true;
        int i = 0;
        while (running) {
            if (i<3){
                App.synthesizer.speak("请点击启动按钮");
                i++;
            }
            try {
                sleep(4000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}.start();

延时线程

new Thread(){
    @Override
    public void run() {

        try {
            Thread.sleep(5 * 100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        mHandler2=new Handler();
        Log.i("Lgq","s....e33.");
    }
}.start();
private BaseActivity activity;
public void setActivity(BaseActivity activity) {
    this.activity = activity;
}
private Handler mHandler = new Handler();

mHandler.post(new Runnable() {
    @Override
    public void run() {
        activity.dismissWaitingDialog();
    }
});

private void testSend(){
    new Thread(new Runnable() {
        @Override
        public void run() {
            int i=20;
            while (i>0){
                send_0A06();
                LogPlus.e("onSuccess---发送次数===" + i);
                i--;
                SystemClock.sleep(3000);
            }
        }
    }).start();
   
}

定时延时

connect(5);//延时5秒
private Disposable mDisposable;
private void connect(long delay) {
    disposable();
    mDisposable = Observable.timer(delay, TimeUnit.SECONDS).subscribeOn(Schedulers.newThread()).subscribe(new Consumer<Long>() {
        @Override
        public void accept(Long aLong) throws Exception {
            LogPlus.i("mqtt ========   Observable-->connect)()");
            // 开始连接
            connect();
        }
    });
}
private void disposable() {
    if (mDisposable != null && !mDisposable.isDisposed()) {
        mDisposable.dispose();
    }
}

定时循环

//开始延时5秒,每次间隔12秒
        Observable.interval(5, 12, TimeUnit.SECONDS).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<Long>() {
            @Override
            public void accept(Long aLong) {

                Log.d("lgqq温度=====  ","");
                Log.i("lgq","bbh--33---  "+packageCode());
            }
        });

    /**
     * 倒计时,定时器
     */
    Handler handlerTime = new Handler(Looper.getMainLooper());
    private  long connectTime=33;//3分钟
    private long timeCount=0;
    private long delayMillis = 300;
    Runnable runnable=new Runnable() {
        @Override
        public void run() {
            timeCount++;
            if(timeCount < connectTime*6){
                double f = (double) timeCount/(double) (connectTime*6);
                int progress = (int) (f*100);
//                baifebnte.setText(progress+"%");
                baifebnte.setText(progress+"%");
                horizontalProgressBar.setProgress(progress);

            }else{
                //重新

            }
            if(handlerTime!=null){
                handlerTime.postDelayed(this, delayMillis);
            }
        }
    };

if(handlerTime!=null){
    handlerTime.removeCallbacks(runnable);
    handlerTime=null;
}
handlerTime.removeCallbacks(runnable);
if(handlerTime!=null){
    handlerTime.postDelayed(runnable, delayMillis);//每1秒执行一次runnable.
}

 在baseactivity 里调用

@Override
protected void onResume() {
    super.onResume();
    Log.e("lgq","随机数==== "+isAppInBackground(this));
}

@Override
protected void onStop() {
    super.onPause();
    Log.e("lgq","随机数==== "+isAppInBackground(this));
}

public  boolean isAppInBackground(Context context) {
    boolean isInBackground = true;
    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT_WATCH) { // Android5.0及以后的检测方法
        List<ActivityManager.RunningAppProcessInfo> runningProcesses = am.getRunningAppProcesses();
        for (ActivityManager.RunningAppProcessInfo processInfo : runningProcesses) {
            //前台程序
            if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
                for (String activeProcess : processInfo.pkgList) {
                    if (activeProcess.equals(context.getPackageName())) {
                        isInBackground = false;
                    }
                }
            }
        }
    } else {
        List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
        ComponentName componentInfo = taskInfo.get(0).topActivity;
        if (componentInfo.getPackageName().equals(context.getPackageName())) {
            isInBackground = false;
        }
    }
    return isInBackground;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值