【发布时间】:2017-08-10 15:49:06
【问题描述】:
我对 Android 编程很陌生,所以我需要您的建议。
现状:
我构建了一个 Android 应用程序 (C#) 以及一个在 Raspberry Pi 上运行的常规服务器应用程序 (C++)。两个程序都通过 UDP 进行通信。在服务器应用程序接收到信号的那一刻,它会发出一条广播消息,Android 应用程序正在侦听该消息。一切正常,直到 Android 设备进入睡眠/闲置状态,这导致了我的问题。
问题:
当设备进入睡眠状态时,如何实现 Android 应用程序的侦听器仍然有效?我不期待任何解决方案,而是任何形式的建议,因此我不会在错误的方法上浪费时间。
研究:
- 我阅读并尝试了将继续在后台运行的服务,但随着设备进入睡眠状态,该服务也停止了。
- 我读到了广播接收器,它允许应用程序/服务获取系统的更多信息。
- 我读到了 WAKELOCK,它可以让我保持 CPU 处于活动状态,但出于我的目的,它应该“一直”处于运行状态,这会消耗大量能量。
我想在后台运行的代码:
public void AsyncReceive()
{
// ...
Task.Run(() =>
{
while (this.isActive)
{
byte[] buffer = new byte[1];
DatagramPacket incoming = new DatagramPacket(buffer,
buffer.Length);
try
{
sock.Receive(incoming);
}
catch (...)
{
// Exception handling goes here...
}
// Communicate with the Android application
this.FireBroadCastReceivedEvent();
}
});
}
编辑
我还需要注意有关传入消息的应用程序(代码的@'FireBroadCastReceivedEvent()' 部分)。什么是这样做的好方法?
【问题讨论】:
标签: c# android service broadcast wakelock