• 答CsdnBlogger问-关于定时和后台服务问题



     本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处!


    前段时间写了不少博客,在问答页面也陆续回答几十个问题,之后Csdn乙同学找到我,说要推荐我参加问答类目作答主,解释一些同学的疑惑,本着分享精神,加上多年来一直默默的使用网上大家的贡献,于是写出一部分个人见解,大家仁者见仁,一起讨论,如果能给出更好的方案,那是再好不过的。


    问1:有关于后台服务的问题?(提问者:qq_26763799

    app中有个功能,玩家通过我们app启动另一款应用(大部分是游戏类,所以比较占内存),我们app开启后台服务倒计时计算用户使用时长,当到达规定时间就发放奖励,但是当内存紧张或者回收机制比较霸道的手机上,总会失效,用户经常反应玩了规定时长,还是拿不到奖励,有没有什么能优化的方法或者地方或建议?


    答1:

    玩家时间,建议使用token+游戏包名+毫秒的方式保存

    关于后台倒计时,最霸道的做法,我们可以开一个进程:里面专门运行一个Service来做这个倒计时功能,使用Aidl的方式操作,Service要开放权限给到你的主进程。一个进程比如只有24M,你本进程即使死掉,它依然可以运行,下次进来继续从此进程中读取用户时间。

    其次,你可以把发放奖励的玩家时长配置到文件中,然后判断只要应用未关闭就执行倒计时,并叠加写入文件,比如隔2s就写入文件中,即使有所些微差距也是可以的,这样即使下次重启,你也可以提取出上次玩家玩的时间,继续执行倒计时-当然可以存在sd卡、内存卡、数据库、SharePre甚至网络服务器端

    最后,如果能把你们耗时的程序打成so包运行,或者放到其他进程运行,把自己的应用内存消耗减至最少,可以使用RxJava的schedule方法操作,
    这样给用户奖励的事情,最好将时长写入文件来配置,当然最靠谱的是写入服务端数据库,这样可以有效保护用户的权益,减少对用户权益的损害。



    问2:有关于定时提醒的问题?提问者:qq_26763799

    应用中某些功能模块需要做到定时提醒功能(类似部落冲突这款游戏建造时间到了自动菜单栏通知提示),用alarmmanager可以做到监听系统时间,到点了发送,但是在某些手机rom下(特别是三星,GC回收有点过分,灭屏就全回收)灭屏或者当前app进程被杀后将收不到提示,有些甚至定时太长也会导致收不到,或者一亮屏就一股脑全部提醒,有没什么好的优化或者保活策略?


    答2:

    那首先,你可以参加上一个同学的答案:

    AlarmManager是个不错的方案,让依托于系统,来实现轮循,是比较靠谱的方式,问题主要在于如何保证自己一直执行,这是一个策略,即保证轮循任务不管怎样能一直执行

    实现方式多种多样,这里介绍几种:通过Aidl另启进程、通过Application启动时即开启轮循任务+Demon任务
    核心思想,就是把任务写入文件,或者写入服务器,通过本地轮循的方式,来操作即将触发的任务;从整个系统来考虑,所有的功能都是用文件来实现的,再加上驱动和触屏,所以文件是编程的基础,存在这里,外加服务端备份,是处理棘手问题的利器。




  • 相关阅读:
    CTFHub题解-技能树-Web-文件上传(00截断、双写后缀)【三】
    CTFHub题解-技能树-Web-文件上传(.htaccess、MIME绕过、文件头检查)【二】
    CTFHub题解-技能树-Web-文件上传(无验证、前端验证)【一】
    CTFHub题解-技能树-Web-SQL注入(Cookie注入、UA注入、Refer注入)【三】
    记一次centos7重启后docker无法启动的问题
    ctfshow——web_AK赛
    Windows10安装MongoDB
    centOS7安装docker和docker-compose
    xray—学习笔记
    ctfhub技能树—sql注入—过滤空格
  • 原文地址:https://www.cnblogs.com/fengju/p/6174385.html
Copyright © 2020-2023  润新知