我有一个单例对象,当应用程序运行时,我将在该对象上恰好执行一个线程。
到目前为止,我已经在MainActiviy::onCreate
中创建了线程
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
thread{myobject.run()}
}
}
但是与documentation相反,指向onCreate()
的箭头是 App进程被杀死,它看起来像每次onCreate()
都被调用时重新启动,无论是否被杀死或线程是否仍在运行。
object myobject{
fun run(){
while(true){
do_stuff()
}
}
}
当然可以获取仅启动一次线程的锁,但是由于Kotlin中对单例对象有很好的语法,所以这是一个相关的(我认为非常普遍)的问题,我开始相信那里可能是一种更简单,更优雅的方式。
还是获取对象锁定的首选方法?
答案 0 :(得分:3)
您可以通过在Application类的OnCreate中启动线程来实现。创建一个扩展Application类的类,并将其添加到清单中
MyApp.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仅被调用一次。因此,在您的应用程序的整个生命周期中只有一个线程。
答案 1 :(得分:1)
您可以使用IntentService
并将状态存储在SharedPreference
上。
https://developer.android.com/training/run-background-service/create-service