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

本文介绍了如何在Android中监听页面无操作并实现定时返回功能,通过动态代理优化代码,减少侵入性。文章详细讲解了功能分析、实现方法、代码优化和可能存在的问题,提供了一种优雅的解决方案。
摘要由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!!.sendBroadcast(Intent(GV
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值