android - 如何在 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)
}
任何人有任何他们有兴趣分享的想法吗?非常感谢!
解决方案
您可以使用线程来执行此任务。我知道在 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()
推荐阅读
- python - 查找最多三个数字的程序(PYTHON)
- c# - 如何将 Woocommerce Json 反序列化为 datagridview
- angular8 - 服务无法访问其他服务的数据
- node.js - TypeError:无法在 Function.keys () 处将 undefined 或 null 转换为对象
- javascript - Javascript & PHP 处理
- c++ - lcov 和 gcovr -r 命令正在为 UT 生成 cpp 文件代码覆盖率报告
- flutter - Flutter 中的 Flutter 扩展和 Stateful Widget
- java - 如何根据 $ 修改数组相同的值
- java - 相同的代码,不同的工作(JAVA图形异或模式)
- nginx - 创建 GKE 集群后无法从 Google Cloud Shell 访问 Load Balancer IP