android 默认application会启动service么_安卓开发入门教程Service

这篇博客介绍了Android中的Service组件,强调其在后台执行长耗时操作且无界面的特点。通过创建、启动和绑定Service的样例代码,详细阐述了如何在Android应用中使用Service,包括startService和bindService两种方式,并提供了完整的源代码链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是Service

Service又称服务,是一种可在后台执行长耗时操作的无操作界面组件.Service可以被像Activity这样的组件启动,启动后,就在后台一直运行,即使启动它的组件销毁了也不影响Service的运行.启动Service的组件可以和Service进行绑定来进行通信,如播放音乐等.

创建Service

  1. 在工程目录中单击右键,选择“New>Service>Service”

    e99a96c026dc02957e7b9b2d525bd5b6.png

  2. 在窗口中设置Service名称(其他设置保持默认即可)

    ed42bac06c92783f7e448cf8b6d65f5b.png

  3. 创建后的Service如下

class MyService : Service() {
override fun onBind(intent: Intent): IBinder {
TODO("Return the communication channel to the service.")
}
}
  1. 查看AndroidManifest.xml文件,里面应该已经增加了如下Service配置.

<manifest ...>
<application ...>
<serviceandroid:name=".MyService"android:enabled="true"android:exported="true">service>
...
application>
manifest>

使用Service

Service有两种使用方式:

  1. 通过startService启动Service
    一旦启动后,服务就在后台执行,即使启动它的组件已销毁也不受影响,除非调用stopService来停止它.

  2. 通过bindService绑定Service
    Service被绑定后,一样可以在后台执行,同时还可以和绑定它的组件通信.一个Service可以被多个组件绑定.当所有组件都和它解绑后,那Service就会销毁.

启动Service样例

  1. Service代码:MyService.kt

class MyService : Service() {

override fun onCreate() {
Log.d("MyService", "onCreate")
super.onCreate()
}

override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
Log.d("MyService", "onStartCommand")
thread {
study()
}
return super.onStartCommand(intent, flags, startId)
}

private fun study() {
for (index in 1..10) {
Log.d("MyService", "我在学习,我在学习,没偷懒")
Thread.sleep(2000)
}
}

override fun onDestroy() {
Log.d("MyService", "onDestroy")
super.onDestroy()
}

override fun onBind(intent: Intent?): IBinder? {
return null
}
}
  1. 调用代码

class MainActivity : AppCompatActivity() {

private lateinit var serviceIntent: Intent
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

//启动Service
serviceIntent = Intent(this, MyService::class.java)
startService(serviceIntent)
}

override fun onDestroy() {
super.onDestroy()
//停止Service
stopService(serviceIntent)
}
}

绑定Service样例

  1. Service代码:MyService.kt

class MyService : Service() {
inner class MyBinder : Binder() {

fun study() {
Log.d("MyService", "开始学习")
}

fun getProgress() {
Log.d("MyService", "当前进度:50%")
}
}

private val binder = MyBinder()
override fun onBind(intent: Intent?): IBinder? {
return binder
}
}
  1. 调用代码

class MainActivity : AppCompatActivity() {
var myBinder: MyService.MyBinder? = null

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
initListeners()
}

private fun initListeners() {
//绑定Service
bindBtn.setOnClickListener {
val intent = Intent(this, MyService::class.java)
bindService(intent, serviceConnection, BIND_AUTO_CREATE)
}

//解绑Service
unBindBtn.setOnClickListener { unbindService(serviceConnection) }

//通过绑定关系和Service通信,调用Service里的方法
studyBtn.setOnClickListener { myBinder?.study() }
progressBtn.setOnClickListener { myBinder?.getProgress() }
}

/**
* 创建Service绑定连接
*/
private val serviceConnection = object : ServiceConnection {
override fun onServiceConnected(name: ComponentName, binder: IBinder) {
myBinder = binder as MyService.MyBinder
}

override fun onServiceDisconnected(name: ComponentName) {}
}
}

完整源代码

https://gitee.com/cxyzy1/AndroidServiceDemo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值