首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在后台运行服务

在后台运行服务
EN

Stack Overflow用户
提问于 2017-06-25 10:26:17
回答 1查看 1.1K关注 0票数 0

我对Android非常陌生,我不太明白IntentServices是如何工作的。到目前为止,这就是我所拥有的:

代码语言:javascript
复制
class TimerActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_timer)

        findViewById(R.id.startBtn).setOnClickListener {
            startService(Intent(this@TimerActivity, TimerService::class.java))
        }

        findViewById(R.id.stopBtn).setOnClickListener {
            stopService(Intent(this@TimerActivity, TimerService::class.java))
        }
    }
}

class TimerService : IntentService("TimerService") {

    override fun onCreate(){
        super.onCreate()
        toast("Started activity")
    }

    override fun onDestroy(){
        super.onDestroy()
        toast("Stopped activity")
    }

    override fun onHandleIntent(intent: Intent?) {

    }
}

我试着在点击按钮的背景下开始一个活动,并在另一个按钮的点击时停止它。但是为什么onDestroy()在onCreate()之后就会被触发,而我却不点击停止按钮呢?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-25 12:02:05

这就是IntentService的工作原理。

IntentService是按需处理异步请求(表示为意图)的服务的基类。..。IntentService将接收意图,启动工作线程,并酌情停止服务。 所有请求都是在一个工作线程上处理的--它们可能需要尽可能长的时间(并且不会阻塞应用程序的主循环),但是一次只处理一个请求。

只要有任务要处理,服务就会存活。在此之后,服务将结束,并使用下一个任务重新启动。

如果您想拥有一个运行服务,甚至是一个绑定服务,您必须直接对Service进行子类,并负责线程处理。

警告:服务在与声明它的应用程序相同的进程中运行,默认情况下在该应用程序的主线程中运行。如果您的服务在用户与来自同一应用程序的活动交互时执行密集或阻塞操作,则服务会降低活动性能。若要避免影响应用程序性能,请在服务中启动一个新线程。

以及生命周期

警告:为了避免浪费系统资源和消耗电池电量,请确保应用程序在完成工作后停止其服务。如果有必要,其他组件可以通过调用stopService()来停止服务。即使为服务启用绑定,如果服务收到对onStartCommand()的调用,也必须自己停止服务。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44745430

复制
相关文章

相似问题

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