首页 > 解决方案 > 如何在 Android 继承的 Activity 类中创建 Handler 和 Runnable 对象

问题描述

我有一个继承的类,我的所有活动都继承。在该基础/父活动类中,我想创建一个处理程序和可运行对象,该对象在所有子活动中每 5 秒运行一次,而无需在每个子活动中添加代码。我让它工作,可运行对象在继承的活动中,但我似乎无法绕过必须在每个子活动中为处理程序添加代码。

open class BaseActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener {
    val handlerBaseActivity = Handler()
    val runnable = object : Runnable {
        override fun run() {
            Log.d("icepts","runnable from base...")
        }
    }
class MainActivity : BaseActivity () {
    val handlerLocalActivity = Handler()

    override fun onCreate(savedInstanceState: Bundle?) {
    ...
    handlerLocalActivity.postDelayed(runnable, 100)
    }

   override fun onPause() {
        super.onPause()
        handlerBaseActivity.removeCallbacks(runnable)
    }

任何人有任何他们有兴趣分享的想法吗?非常感谢!

标签: androidkotlin

解决方案


您可以使用线程来执行此任务。我知道在 Kotlin 中你有协程,它们实例化成本更低且更易于管理,所以你可能想要走这条路。确保你在这个线程之外创建你的处理程序,这样当你执行 UI 更改时你不会得到错误,但是,如果你想执行后台任务,那么根本不要使用处理程序。您可以保留对该线程的引用,以便您可以暂停它,方法是将 running 设置为 false 并中断它,然后将其设置为 null,以防万一,当您完全停止使用它时。

fun loop() {
 handler.post(runnable) 
 //or 
 runOnUIThread(runnable)
 //background task
}
Thread(Runnable{
  while(running){
   loop()
   try{
   Thread.sleep(1000 * 5)
   }catch(e: InterruptedException){
   //some weird stuff happened
   }
  } 
}).start()

推荐阅读