首页 > 解决方案 > 启动线程一次且仅一次

问题描述

我有一个单例对象,在应用程序运行时我将在其上执行一个线程。

到目前为止,我已经创建了线程MainActiviy::onCreate

class MainActivity : AppCompatActivity() {
   override fun onCreate(savedInstanceState: Bundle?) {
     super.onCreate(savedInstanceState)
     thread{myobject.run()}
   }
}

但与指向App 进程被杀死的箭头的文档相反,看起来每次重新启动应用程序时都会调用它,无论是否被杀死或其线程仍在运行。 onCreate()onCreate()流程图

object myobject{
   fun run(){
      while(true){
         do_stuff()
      }
   }
}

当然可以获取一个锁来只启动线程一次,但是因为在 Kotlin 中有一个很好的语法用于单例对象,这是一个相关的(我假设很常见)问题,我开始相信可能会有一个更简单更优雅的方式。

或者是获取对象锁定的首选方式?

标签: androidmultithreadingkotlin

解决方案


您可以通过在 Application 类的 OnCreate 中启动线程来实现这一点。创建一个扩展 Application 类的类并将此类添加到清单中

我的应用程序.kt

class MyApp : Application() {

    override fun onCreate() {
        super.onCreate()
       thread{myobject.run()} //here
    }

}

AndroidManifest.xml

<application 
   android:name=".com.yourpakage.MyApp"
   android:label="@string/app_name" 
   ...>

与活动生命周期不同,应用程序的 onCreate 只被调用一次。因此,在您的应用程序的整个生命周期中只有一个线程。


推荐阅读