Hướng dẫn này minh họa cách chạy Android Service liên tục trong nền (background) sử dụng Kotlin.
Bước 1: Tạo dự án mới
Mở Android Studio, chọn File → New Project và điền thông tin cần thiết.
Bước 2: Thiết kế giao diện (activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="50dp"
android:text="Tutorials Point"
android:textAlignment="center"
android:textColor="@android:color/holo_green_dark"
android:textSize="32sp"
android:textStyle="bold" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Click here to start background Service"
android:textSize="16sp"
android:textStyle="bold" />
</RelativeLayout>
Bước 3: Tạo Service class (MyService.kt)
import android.app.Service
import android.content.Intent
import android.os.IBinder
import android.widget.Toast
class MyService : Service() {
override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
onTaskRemoved(intent)
Toast.makeText(
applicationContext,
"Đây là Service đang chạy trong Background",
Toast.LENGTH_SHORT
).show()
return START_STICKY
}
override fun onBind(intent: Intent): IBinder? {
throw UnsupportedOperationException("Chưa triển khai")
}
override fun onTaskRemoved(rootIntent: Intent) {
val restartServiceIntent = Intent(applicationContext, this.javaClass)
restartServiceIntent.setPackage(packageName)
startService(restartServiceIntent)
super.onTaskRemoved(rootIntent)
}
}
Bước 4: Viết code MainActivity.kt
import android.content.Intent
import android.os.Bundle
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
title = "KotlinApp"
val button: Button = findViewById(R.id.button)
button.setOnClickListener {
startService(Intent(applicationContext, MyService::class.java))
}
}
}
Bước 5: Khai báo Service trong AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="com.example.q11">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service
android:name=".MyService"
android:enabled="true"
android:exported="true" />
</application>
</manifest>
Chạy ứng dụng
Kết nối thiết bị, nhấn Run. Nhấn nút "Click here to start background Service" để khởi động Service. Service sẽ tiếp tục chạy ngay cả khi ứng dụng bị đóng nhờ cơ chế START_STICKY và khởi động lại trong onTaskRemoved.
Lưu ý: Trên Android 8.0 (API 26+) trở lên, cần sử dụng Foreground Service với Notification để đảm bảo service chạy liên tục. Ví dụ này phù hợp cho các phiên bản Android cũ hoặc mục đích học tập.