백그라운드 모드에서 서비스로 실행되도록 Android 앱 작성
이 문제를 해결하려면 먼저 Android 앱 활동 수명 주기를 약간 이해해야 합니다. 사용자가 주의가 산만해져 앱 대신 포그라운드에서 Facebook 앱을 열면 앱 활동이 종료되고 onDestroy()가 트리거됩니다. 이것은 사용하지 않는 메모리를 비우고 더 나은 배터리 관리를 제공하므로 안드로이드 시스템에 좋습니다. 그러나 이는 앱이 종료되고 상태와 기능이 손실되기 때문에 앱에 좋지 않을 수 있습니다.
다음 단계에서는 앱을 리팩터링하여 Bluetooth 연결과 같은 백그라운드 기능을 서비스로 분리해야 합니다. 서비스는 사용자 인터페이스와 독립적으로 백그라운드에서 장기 실행 작업을 수행할 수 있는 애플리케이션 구성 요소입니다. 다음은 서비스 코드의 예입니다.
import android.app.Service
class MyService : Service() {
override fun onBind(intent: Intent): IBinder? {
return null
}
override fun onCreate() {
// move your service logic here
}
override fun onDestroy() {
// clean up your service logic here
}
}
이 서비스를 사용하려면 AndroidManifest.xml에서도 정의해야 합니다. 예를 들면 다음과 같습니다(이름을 서비스 패키지 이름으로 대체).
<application>
...
<service android:enabled="true" android:name="com.victorleungtw.myapp.services.MyService"></service>
</application>
Activity onCreate와 같은 활동에서 이 서비스에 대한 시작을 트리거하려면 다음 행을 추가하십시오.
startService(Intent(this, MyService::class.java))
또한 서비스를 중지하려는 위치에 다음 줄을 추가합니다.
stopService(Intent(this, BleService::class.java))
이 변경 후에는 앱이 더 잘 구성되지만 아직 백그라운드 모드에서 계속 실행할 수는 없습니다. 이렇게 하려면 서비스 내에서 두 가지 메서드를 더 추가해야 합니다.
class MyService : Service() {
@RequiresApi(Build.VERSION\_CODES.O)
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
val channelId =
if (Build.VERSION.SDK\_INT >= Build.VERSION\_CODES.O) {
createNotificationChannel("my\_service", "My Background Service")
} else {
// If earlier version channel ID is not used
""
}
val notification: Notification = Notification.Builder(this, channelId)
.setContentTitle("title")
.setContentText("text")
.build()
startForeground(2001, notification)
return START\_STICKY
}
@RequiresApi(Build.VERSION\_CODES.O)
private fun createNotificationChannel(channelId: String, channelName: String): String{
val chan = NotificationChannel(channelId,
channelName, NotificationManager.IMPORTANCE\_NONE)
chan.lightColor = Color.BLUE
chan.lockscreenVisibility = Notification.VISIBILITY\_PRIVATE
val service = getSystemService(Context.NOTIFICATION\_SERVICE) as NotificationManager
service.createNotificationChannel(chan)
return channelId
}
}
여기서 일어나는 일은 앱이 백그라운드에서 계속 실행될 때 사용자가 알 수 있도록 알림이 생성된다는 것입니다. 다음과 같이 표시됩니다.
그게. 이제 사용자는 앱 기능에 따라 백그라운드에서 앱을 실행하고 Bluetooth에 연결하고 사용자 데이터를 동기화하거나 음악을 재생하면서 포그라운드에서 Facebook 앱을 읽는 동안 멀티태스킹을 할 수 있습니다.
2020년 9월 12일 https://victorleungtw.com에 원래 게시되었습니다.
Reference
이 문제에 관하여(백그라운드 모드에서 서비스로 실행되도록 Android 앱 작성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/victorleungtw/write-your-android-app-to-run-in-background-mode-as-a-service-5hla텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)