归志宁无五亩园,读书本意在元元。这篇文章主要讲述Android 前台服务相关的知识,希望能为你提供帮助。
android 前台服务
学习自
https://blog.csdn.net/guolin_blog/article/details/11952435#t3
前台服务漫谈
我们之前学习的Service都是运行与后台的,自然相对优先级会比较低一点,当内存不足的时候很容易被杀死。但是谁又希望自家的Service被杀死呢。那自然是想办法将自家的服务的优先级提高了,如果提高Service的优先级那当然是用---前台服务,也就是我们本章的主题。
常见的前台服务
各种音乐播放APP中的前台服务是最常见的了,比如我最喜欢的网易云音乐,在播放音乐的时候,在通知栏都会,存在一个类似通知的视图,这其实就是一个前台Service,也是Service+RemoteView+Notification的结合体。网易云音乐通过前台服务不仅可以保证Service的运行,还实时地显式了音乐的播放信息,并且也非常方便我们来切换音乐。
因为手头没有手机,图片来源于网络。
【Android 前台服务】
文章图片
实现前台服务
前台服务的布局
<
?xml version="
1.0"
encoding="
utf-8"
?>
<
RelativeLayout xmlns:android="
http://schemas.android.com/apk/res/android"
android:layout_width="
match_parent"
android:layout_height="
100dp"
>
<
ImageView
android:id="
@+id/posterIV"
android:layout_width="
wrap_content"
android:layout_height="
match_parent"
android:src=https://www.songbingjia.com/android/"
@mipmap/ic_launcher"
/>
<
TextView
android:id="
@+id/singNameTV"
android:layout_width="
wrap_content"
android:layout_height="
wrap_content"
android:layout_marginLeft="
8dp"
android:layout_marginTop="
10dp"
android:layout_toRightOf="
@id/posterIV"
android:text="
Sing Name"
android:textColor="
#2b2b2b"
android:textSize="
18sp"
/>
<
TextView
android:id="
@+id/singerNameTV"
android:layout_width="
wrap_content"
android:layout_height="
wrap_content"
android:layout_below="
@id/singNameTV"
android:layout_marginLeft="
8dp"
android:layout_marginTop="
3dp"
android:layout_toRightOf="
@id/posterIV"
android:text="
Sing Name"
android:textColor="
#2b2b2b"
android:textSize="
12sp"
/>
<
ImageView
android:id="
@+id/previousIV"
android:layout_width="
20dp"
android:layout_height="
20dp"
android:layout_below="
@id/singerNameTV"
android:layout_marginLeft="
8dp"
android:layout_marginTop="
5dp"
android:layout_toRightOf="
@id/posterIV"
android:src="
@drawable/previous"
/>
<
ImageView
android:id="
@+id/pauseIV"
android:layout_width="
20dp"
android:layout_height="
20dp"
android:layout_below="
@id/singerNameTV"
android:layout_marginLeft="
8dp"
android:layout_marginTop="
5dp"
android:layout_toRightOf="
@id/previousIV"
android:src="
@drawable/pause"
/>
<
ImageView
android:id="
@+id/nextIV"
android:layout_width="
20dp"
android:layout_height="
20dp"
android:layout_below="
@id/singerNameTV"
android:layout_marginLeft="
8dp"
android:layout_marginTop="
5dp"
android:layout_toRightOf="
@id/pauseIV"
android:src="
@drawable/next"
/>
<
/RelativeLayout>
Service
class MusicService : Service() {
override fun onBind(intent: Intent?): IBinder {
TODO("
not implemented"
) //To change body of created functions use File | Settings | File Templates.
}override fun onCreate() {
super.onCreate()
val remoteViews = RemoteViews(this.packageName, R.layout.music_remote)remoteViews.setOnClickPendingIntent(R.id.previousIV, createIntent("
top.littledavid.studyservice.PREVIOUS"
))
remoteViews.setOnClickPendingIntent(R.id.pauseIV, createIntent("
top.littledavid.studyservice.PAUSE"
))
remoteViews.setOnClickPendingIntent(R.id.nextIV, createIntent("
top.littledavid.studyservice.NEXT"
))val notification = Notification.Builder(this).apply {
setSmallIcon(R.mipmap.ic_launcher)
setCustomContentView(remoteViews)
}.build()
//开启前台服务
startForeground(1, notification)
}override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
when (intent!!.action) {
"
top.littledavid.studyservice.PREVIOUS"
->
"
Previous"
.logE()
"
top.littledavid.studyservice.PAUSE"
->
"
PAUSE"
.logE()
"
top.littledavid.studyservice.NEXT"
->
"
NEXT"
.logE()
"
top.littledavid.studyservice.START"
->
"
Start playing music"
.logE()
else ->
"
UNKOW Operation"
.logE()
}
return super.onStartCommand(intent, flags, startId)
}override fun onDestroy() {
super.onDestroy()
}private fun createIntent(action: String): PendingIntent {
val intent = Intent(this, MusicService::class.java)
intent.action = action
return PendingIntent.getService(this, 0, intent, 0)
}
}
Manifest文件中配置服务
<
service android:name="
.MusicService"
>
<
intent-filter>
<
action android:name="
top.littledavid.studyservice.PREVIOUS"
/>
<
action android:name="
top.littledavid.studyservice.PAUSE"
/>
<
action android:name="
top.littledavid.studyservice.NEXT"
/>
<
action android:name="
top.littledavid.studyservice.START"
/>
<
/intent-filter>
<
/service>
效果如下
文章图片
推荐阅读
- Android官方架构组件介绍之LiveData
- Tp5框架 关于App登录token唯一加密算法
- QQ空间怎样开通黄钻LV9?开通办法介绍
- TIM聊天窗口怎样取消置顶?_其它聊天
- 微信排版有啥技巧?微信公众号排版技巧分享_微信
- 2017微信怎样解除手机绑定?微信解除手机绑定的办法_微信
- 微信有哪些好用的小程序?19款好用的微信小程序_微信
- 微信群验证消息怎样设置?_微信
- 孙俪那年花开月正圆周莹gif表情包大全_其它聊天