最近在做毕设,要开发个简单的物联网APP,第一次开发APP,需要接收单片机发来的温湿度数据,连接TCP后发现在手机息屏三分钟左右之后应用就会被杀掉,TCP断开,无法不间断的显示数据。
上网查发现有两种方法:
1,设置应用为前台服务,但会有通知栏
2,电源管理,暴力使CPU不休眠
2不到万不得已还是不愿意使用(耗电快),最后选择了1.
主要参考了这几篇博客:
创建服务类代码1
创建服务类代码2
API26以上的notification构建方法
从我一个萌新来讲,记录几点注意的地方:
1.服务的创建,参考前两篇博客,有详细代码
2.服务的调用,我是在主活动里面调用的,要注意不要隐式调用,好像Android5.0后必须申明Intent对象,不然会报错【Service Intent must be explicit】
3.注意API版本,26(Android8.0)之后启动服务函数变了
除了启动函数,通知构建函数也改变了,使用以前的构造器会报下面的错误【Bad notification for startForeground】,修改按照引用的第三篇博客
API26以上的builder改变,新的构造器builder有两个参数,除了之前的context,还加了通知渠道ID
也就是说我引用的前两篇博客中的构造方法要修改一下。
4.服务申明,需要在AndroidMainfest.xml中申明
第二个exported是说只在这个应用中这样申请权限
5.记得在手机的应用管理中给你的应用 允许通知
…我TM一下午没开通知,程序运行不报错,疯狂打Log, DEBUG,一直找原因为什么不弹通知。最后想到原因的我,哭了。
经测试,现在手机息屏39分钟后还是保持着TCP连接,仍然可以接受并显示温湿度。
感谢参考到的博主的分享。
OK,结束,今天的坑记录总结完毕。