在后台运行服务

我对Android开发非常陌生,而且我并没有真正了解IntentServices是如何工作的。 这是我迄今为止:

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()之后立即被触发,没有我点击停止按钮?

谢谢

这就是IntentService工作原理。

IntentService是一个服务的基类,用于处理异步请求(表示为Intents)。 […]

IntentService将收到Intents,启动工作线程,并根据需要停止服务。

所有请求都在单个工作线程上处理 – 它们可能需要的时间(并且不会阻塞应用程序的主循环),但是一次只能处理一个请求。

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

如果你想有一个正在运行的服务 ,甚至可能是一个绑定的服务 ,你必须直接对Service进行子类化并照顾线程

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

和生命的时间

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