文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android启动前台服务(startForegroundService)

2023-08-20 15:20

关注

问题:

APP in background in null uid
AndroidRuntime: android.app.RemoteServiceException: Context.startForegroundService() did not then call Service.startForeground():

注意事项:

Android之 Service服务详解

1、前台权限:

2、Service中开启通知:

class LogUploadService : Service() {    override fun onBind(arg0: Intent): IBinder? {        return null    }    override fun onCreate() {        super.onCreate()        Log.d("caowj", "LogUploadService onCreate")        initNotification()    }    private fun initNotification() {        val channelName = "埋点上传"        val channelId = BuildConfig.APPLICATION_ID// 发送通知,把service置于前台        val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager        // 从Android 8.0开始,需要注册通知通道        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {            val channel = NotificationChannel(channelId, channelName, NotificationManager.IMPORTANCE_HIGH)            notificationManager.createNotificationChannel(channel)        }        val notification = NotificationCompat.Builder(this, channelId)            .setSmallIcon(R.mipmap.app_icon)            .setContentTitle("埋点Log上报")            .setContentText("服务正在运行,请勿关闭")            .setAutoCancel(false)            .setOngoing(true)            .build()        // 注意第一个参数不能为0        startForeground(1, notification)    }    override fun onDestroy() {        //停止的时候销毁前台服务。        stopForeground(true);    }}

3、启动Service:

// Android 8.0使用startForegroundService在前台启动新服务if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {    startForegroundService(Intent(this, LogUploadService::class.java))} else {    startService(Intent(this, LogUploadService::class.java))}

Android O对后台Service限制怎么解决

4、其他方案:

由于从Android 8.0开始禁止应用在后台运行时创建Service,所以要解决这种这种问题有以下几种方案:

官方建议使用JobScheduler 替换 后台Service。

从Android 8.0,使用JobScheduler替换后台Service,它会周期性启动一个任务,查询服务器,然后退出。相比于后台Service,它消耗的资源明显较少,间接提升了手机性能。

问题补充:

JobService 最小间隔时间要求大于15分钟;否则报错:

Requested interval +1m0s0ms for job 10 is too small; raising to +15m0s0ms   Requested flex +1m0s0ms for job 10 is too small; raising to +5m0s0ms        

WorkManager: 周期性任务

5、JobScheduler实现定时间隔处理

Android之任务调度WorkManager和JobSchedule的使用

通过递归的方式,解决最小间隔时间要求大于15分钟的限制;

class PeriodicJobService : JobService() {    override fun onStartJob(p0: JobParameters?): Boolean {        Log.i(TAG, "onStartJob---")        startScheduler(this)        return false    }    override fun onStopJob(p0: JobParameters?): Boolean = false    companion object {        var TAG: String = "caowj"        var JOBID: Int = 100        var InterValTime: Long = 10000        private var jobScheduler: JobScheduler? = null        private var jobInfo: JobInfo? = null        fun startScheduler(context: Context) {            jobScheduler = context.getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler            cancelScheduler()            if (jobInfo == null) {                jobInfo = JobInfo.Builder(JOBID, ComponentName(context, PeriodicJobService::class.java))                    .setMinimumLatency(InterValTime) // 最小为10秒                    .build()            }            val result = jobScheduler?.schedule(jobInfo!!)        }        fun cancelScheduler() {            jobScheduler?.cancel(JOBID)        }    }}

需要提醒:

来源地址:https://blog.csdn.net/zhijiandedaima/article/details/131192337

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯