Android 监听页面无操作,定时返回(动态代理)

本文介绍了一个在Android中监听页面无操作并定时返回的解决方案。通过动态代理和事件通知,如广播,来简化代码入侵。文章讨论了功能分析、实现细节,包括如何监听ACTION_UP事件和优化代码,如白名单处理。同时,指出了弹窗可能导致的计时器问题,并提出了改进方案。最后,总结了如何封装成易于使用的SDK。
摘要由CSDN通过智能技术生成

一、Android 监听页面无操作,定时返回

已有项目新增需求,需监听页面是否有操作,如果在一定时间内没有操作则返回到指定页面。像一些定制化系统如果长时间停留在工程调试页面是不安全的,所以需要返回到主页,同样像电视盒子在感知无操作可以跳转到广告/屏保。

因为是已有项目,所以希望以尽可能小的代码入侵完成我们的功能。

二、功能分析

  1. 首先需要一个计时的功能。 一般想法是设置定时器,如果有操作就取消上一个,再新建新的计时器,这里我们用更简单一点的方法,用一个计时器即可,当感知到操作则更新时间,在计时器中如果当前时间与操作时间差值达到一定时间则触发我们的返回业务。

  2. 通知方式 如何通知,用广播、EventBus/RxBus 或者自定义回调都可以,能把事件回传就行

  3. 如何获取触摸事件更新 我们的应用基础是 Activity,所以只需要监听 Activity 中的 ACTION_UP 即可,重写 dispatchTouchEvent,插入我们的时间更新代码

三、实现

下面我们来写一段简单的代码:

通知用广播来实现

//ActivityMonitor

class ActivityMonitor {

    private var recordTime = System.currentTimeMillis()//记录操作时间
    private var disposable: Disposable? = null//计时器
    private var context: Context? = null

    companion object {
        @JvmStatic
        fun get(): ActivityMonitor {
            return Holder.holder
        }
    }

    object Holder {
        @SuppressLint("StaticFieldLeak")
        val holder = ActivityMonitor()
    }

    fun attach(context: Context) {
        Log.d("zhou", "attach $context")
        this@ActivityMonitor.context = context
        Log.d("zhou", "ActivityMonitor >> $context")
    }

	//创建计时器
    private fun createDisposable(): Disposable {
        Log.d("zhou", "createDisposable")
        return Observable.interval(2, TimeUnit.SECONDS)
                .subscribe {
                    Log.d("zhou", "time === didi......")
                    val time = (System.currentTimeMillis() - recordTime) / 1000
                    if (time > 5) {
                        Log.d("zhou", "timeout...")
                        this@ActivityMonitor.context!!.sendBroadca
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值