安卓app连接CC2541-手机休眠后唤醒,通信不再成功
1. 现在遇到的问题,手机进入休眠状态后唤醒,APP软件和CC2541的通信不正常了,但是CC2541依然检测到时连接状态。如何解决这个问题?手机唤醒之后会重新创建活动?
2.Wakelock 锁机制:
应用程序可以通过申请 wakelock 锁的机制来对系统是否待机作出投票,当有任何一个应用申请了 wakelock 锁,待机时没有释放掉,系统是不会进入待机的,直到所有应用的 wakelock 锁都释放掉了,才会进入待机。本次是否可以使用这个锁?让系统不待机,如果不待机,功耗多吗?假如有QQ开着的话,系统本来就待机的吗?
3. 看下锁的代码
1 /**
2 * 获取电源锁,保持该服务在屏幕熄灭时仍然获取CPU时,保持运行
3 */
4 private void acquireWakeLock() {
5 if (null == wakeLock) {
6 PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
7 wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK
8 | PowerManager.ON_AFTER_RELEASE, getClass()
9 .getCanonicalName());
10 if (null != wakeLock) {
11 Log.i(TAG, "call acquireWakeLock");
12 wakeLock.acquire();
13 }
14 }
15 }
16
17 // 释放设备电源锁
18 private void releaseWakeLock() {
19 if (null != wakeLock && wakeLock.isHeld()) {
20 Log.i(TAG, "call releaseWakeLock");
21 wakeLock.release();
22 wakeLock = null;
23 }
24 }
4. 活动在唤醒之后是否会重新创建?旋转屏幕的时候会
5. 问题描述,手机按下休眠按键,再按下唤醒之后,原来的数据传输就断掉了,抓下logcat发现按下休眠按键的时候,活动stop了。
5. 查看下代码,活动停止的时候,把上一个活动也关闭了。屏蔽掉这个代码,重新测试,手机唤醒之后这个APP就直接关掉了。返回了主界面。
1 protected void onStop() {
2 Log.i(TAG, "---> onStop");
3 //SetTemperatureNotifyUpdate(false);
4 //super.onStop();
5 }
6. 看了一下其他的活动,在唤醒之后,会调用protected void onResume()这个函数,但是这个活动为啥没调用onResume?实际测试的时候发现并没有onStart()这个函数,当把程序关闭的时候,会调用onDestroy()函数。
7. 我想了想一个活动的流程图,必须把需要的生命周期都按照顺序调用一遍才可以,所以修改了代码,问题解决,这次学习收获很大,主要是对活动的生命周期有了更深入的了解。一个活动必须先调用onStop()函数,才能调用onResume()函数。
1 protected void onStop() {
2 Log.i(TAG, "---> onStop");
3 //SetTemperatureNotifyUpdate(false);
4 super.onStop();
5 }
8. 活动的生命周期图,不过这次实际测试发现没有调用onStart()函数
9. 这次的问题在于,手机按下power按键的时候,会调用onStop()函数,而在这个函数里面关闭了蓝牙的主动通知功能。导致重新启动无法再收到数据。至此问题结局,开心的过元旦。
1 protected void onStop() {
2 Log.i(TAG, "---> onStop");
3 //SetTemperatureNotifyUpdate(false);
4 super.onStop();
5 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App