最近在做毕设,要开发个简单的物联网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,结束,今天的坑记录总结完毕。
最近在做毕设,要开发个简单的物联网APP,第一次开发APP,需要接收单片机发来的温湿度数据,连接TCP后发现在手机息屏三分钟左右之后应用就会被杀掉,TCP断开,无法不间断的显示数据。上网查发现有两种方法:1,设置应用为前台服务,但会有通知栏2,电源管理,暴力使CPU不休眠2不到万不得已还是不愿意使用(耗电快),最后选择了1.主要参考了这几篇博客:创建服务类代码1创建服务类代码2AP...
class Socket
Service
:
Service
() {
private var webSockethandler: WebSocketHandler? = null
private var pushObserve: Observer<String>? = null
private var taskLog: Int = 0
private va.
1.
服务
是什么(
Service
)
Service
是一种可在
后台
执行长时间运行操作而不提供界面的
应用
组件。
服务
可由其他
应用
组件启动,而且即使用户切换到其他
应用
,
服务
仍将在
后台
继续运行。此外,组件可通过绑定到
服务
与之进行交互,甚至是执行
进程
间通信 (IPC)。例如,
服务
可在
后台
处理网络事务、播放音乐,执行文件 I/O 或与内容提供程序进行交互。
2.
前台
服务
(
Foreground
Service
)是什么?
前台
服务
执行一些用户能注意到的操作。例如,音频
应用
会使用
前台
服务
来播放音频曲目。
前台
服务
必须显示通知
Foreground
Service
前台
服务
介绍
前台
服务
模拟播放器
前台
服务
发送通知
介绍
前台
服务
前台
服务
是那些被认为用户知道(用户所认可的)且在系统内存不足的时候不允许系统
杀
死的
服务
。
前台
服务
必须给状态栏提供一个通知,它被放到正在运行(Ongoing)标题之下——这就意味着通知只有在这个
服务
被终止或从
前台
主动移除通知后才能被解除。
模拟播放器
前台
服务
发送通知
1、首先创建一个
服务
并发送通知
pu...
Intent
Service
具有以下特点:
(1) Intent
Service
自带一个工作线程,当我们的
Service
需要做一些可能会阻塞主线程的工作的时候可以考虑使用Intent
Service
。
(2) 我们需要将要做的实际工作放入到Intent
Service
的onHandleIntent回到方法中,当我们通过start
Service
(intent)启动了Int...
一、如何保活
后台
服务
在
Android
Service
s (
后台
服务
)里面,我们了解了
Android
四大组件之一的
Service
,知道如何使用
后台
服务
进行来完成一些特定的任务。但是
后台
服务
在系统内存不足的时候,可能会被系统
杀
死。那么如何让
后台
服务
尽量不被
杀
死呢?基本的解决思路主要有以下几种:
1. 提高
Service
的优先级:
<!-- 为
防止
Service
被系统回收,可以尝试通过提高
服务
的优先级解决,1000是最高优先级,数字越小,优先级越低 -->
android
:priori.
start方式启动:onCreate() → onStartCommand() → stop
Service
→ onDestroy()
bind方式启动:onCreate() → onBind() → unbind
Service
→ onUnbind() → onDestroy()
运行方式(优先级)
前台
Service
:会在通知栏显示通知,优先级较高;anr超时时间为20s
后台
Servi