如何通过Apply {}启动处理程序及其runnable

问题描述 投票:0回答:1

我做了以下函数来每15秒生成一个处理程序事件。它以给定标志开始,当我传递False时,我希望处理程序停止其循环。这是我在Kotlin的代码片段:

private fun getSalesData(session:Boolean,delayMs:Long,salesRequest: JsonObjectRequest){
        lateinit var runnable: Runnable
        if (session) {
            HttpRequestSingleton.getInstance(this@NavBarActivity).addToRequestQueue(salesRequest)
        }
        Handler().apply {
            runnable = object : Runnable {
                override fun run() {
                    HttpRequestSingleton.getInstance(this@NavBarActivity).addToRequestQueue(salesRequest)
                    Log.d(TAG, "se esta repitiendo cada 15 segs mamahuevo")
                    postDelayed(this, delayMs)
                }
            }
            postDelayed(runnable, delayMs)
            if (!session){
                Log.d(TAG,"entre aca como todo un crack")
                Handler().removeCallbacksAndMessages(runnable)
            }
        }
        if(!session){
            Log.d(TAG,"aanopqwwwwww")
            Handler().removeCallbacksAndMessages(runnable)
        }
    }
android kotlin apply
1个回答
0
投票

有点难以理解你想要做什么,但这里有可能的解决方案:

private fun getSalesData(session:Boolean,delayMs:Long,salesRequest: JsonObjectRequest){
        lateinit var runnable: Runnable
        if (session) {
            HttpRequestSingleton.getInstance(this@NavBarActivity).addToRequestQueue(salesRequest)
        }
        Handler().apply {
            runnable = object : Runnable {
                override fun run() {
                    HttpRequestSingleton.getInstance(this@NavBarActivity).addToRequestQueue(salesRequest)
                    Log.d(TAG, "se esta repitiendo cada 15 segs mamahuevo")
                    postDelayed(this, delayMs)
                }
            }
            postDelayed(runnable, delayMs)
            if (!session){
                Log.d(TAG,"entre aca como todo un crack")
                removeCallbacks(runnable) // just call this method, as part of your handler object 
            }
        }
        if(!session){
            Log.d(TAG,"aanopqwwwwww")
            removeCallbacks(runnable)// just call this method, as part of your handler object 
        }
    }

更新:对不起,没看到,你使用过removeCallbacksAndMessagesremoveCallbacks将删除任何排队的runnables

© www.soinside.com 2019 - 2024. All rights reserved.