首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >片段onDestroy()与服务onDestroy()

片段onDestroy()与服务onDestroy()
EN

Stack Overflow用户
提问于 2019-09-01 06:33:25
回答 1查看 924关注 0票数 0

我需要执行一些代码,当用户刷上他们的最近列表(杀死应用程序)。

当应用程序被杀死时,我的片段/活动和前台服务都会被销毁。

但是,我应该使用哪个onDestroy()方法来执行代码呢?

下面是我当前的设置:

Fragment.kt

代码语言:javascript
复制
override fun onDestroy() {
    countDownTimer.cancel()
    user1Listener?.remove()
    stopService()
    super.onDestroy()
    mapView?.onDestroy()
}

private fun stopMeetupService(){
    val intent = Intent(mContext.applicationContext, MyService::class.java)
    activity?.stopService(intent)
}

MyService.kt

代码语言:javascript
复制
val db = FirebaseFirestore.getInstance()

override fun onDestroy() {
    super.onDestroy()
    sharedPref = this.getSharedPreferences(getString(R.string.user_data), Context.MODE_PRIVATE)
    val docId = sharedPref.getString("docId", null)
    val docData = mapOf<String, Any?>(
        "user2" to "",
        "location" to null
    )
    if (docId != null && docId.isNotBlank()) {
        db.collection("docs").document(docId).update(docData).addOnSuccessListener {
        }
    }
}

实际上,这两组代码都可以合并到一个onDestroy()中--理想情况下,哪个方法更可靠。

EN

回答 1

Stack Overflow用户

发布于 2019-09-01 06:53:39

我想你应该使用ActivityLifecycleCallbacks,如果你只想停止服务时,杀死应用程序最近。因为在某些情况下,如果替换片段,服务也可能停止。

因此,在您的情况下,停止服务应该是Application级别,而不是活动/片段级别。

这是代码

AppLifecycleHandler

代码语言:javascript
复制
import android.app.Activity
import android.app.Application
import android.content.ComponentCallbacks2
import android.content.res.Configuration
import android.os.Bundle

class AppLifecycleHandler(private val lifeCycleDelegate: LifeCycleDelegate) : Application.ActivityLifecycleCallbacks, ComponentCallbacks2 {

override fun onActivityPaused(p0: Activity?) {
}

override fun onActivityResumed(p0: Activity?) {
}

override fun onActivityStarted(p0: Activity?) {
}

override fun onActivityDestroyed(p0: Activity?) {
         lifeCycleDelegate.onAppDestroyed(p0)
}

override fun onActivitySaveInstanceState(p0: Activity?, p1: Bundle?) {
}

override fun onActivityStopped(p0: Activity?) {
}

override fun onActivityCreated(p0: Activity?, p1: Bundle?) {
}

override fun onLowMemory() {}

override fun onConfigurationChanged(p0: Configuration?) {}

override fun onTrimMemory(level: Int) {

}

}

interface LifeCycleDelegate {
   fun onAppDestroyed(p0: Activity?)
}

应用程序类:在应用程序类中重写onAppDestroyed并在此处停止服务

代码语言:javascript
复制
class App : LifeCycleDelegate {
....
....

override fun onAppDestroyed(p0: Activity?) {
    val intent = Intent(p0, MyService::class.java)
    p0?.stopService(intent)
 }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57743730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档