UDP/RTCP数据包未到达设备/应用程序设备屏幕已锁定

Nit*_*der 6 cpu android android-ndk

我的VOIP Android应用程序具有C/Native Library,它可以执行登录/注销等所有业务逻辑.

问题是当设备屏幕被锁定时,应用程序(c代码)无法从服务器接收任何数据包.我用Wireshark验证了这一点.看起来CPU没有运行.

我能够在我的应用程序INIT上解决下面的问题.

WakeLock mWakeLock =  null;
PowerManager pm = (PowerManager) cxt.getSystemService(Context.POWER_SERVICE);
if(mPartialWakeLock == null){
    // lock used to keep the processor awake.
    mPartialWakeLock = pm.newWakeLock(
        PowerManager.PARTIAL_WAKE_LOCK
            | PowerManager.ON_AFTER_RELEASE, TAG);
    mPartialWakeLock.acquire;
}
Run Code Online (Sandbox Code Playgroud)

但是上面的操作会耗尽我的电池.

为什么请求没有到达我的申请?当屏幕被锁定并从服务器接收请求时,如何使设备CPU始终启动?

注意:使用的EDITED设备:Samsung Rugby Smart i847操作系统:Android OS,v2.3.6(Gingerbread.UCLA4)

该应用程序适用于Galaxy s2.(是因为它的双核处理器和CPU在屏幕锁定上?)SKYPE和VIBER如何设计WRT到睡眠模式?

Ewo*_*oks 1

你考虑过使用服务吗?

服务为应用程序提供了一种工具,可以告诉系统它想要在后台执行的操作(即使用户没有直接与应用程序交互)。通过启动它,系统将安排服务的工作,运行直到服务或其他人明确停止它。

我想这可以帮助..干杯

编辑: 好吧,你之前没有提到服务..我仍然不确定你是否有两个问题(耗尽电池和不接收数据)或者只是一个你接收数据耗尽的问题..?

考虑到耗尽电池,你可以尝试不同的标志考虑到耗尽电池,您可以尝试使用不同的WAKE_LOCK

我注意到的重要一点是,您没有按照链接WAKE_LOCK的建议释放锁定mPartialWakeLock.release()页面

使用此 API 会显着影响设备电池寿命。除非确实需要,否则不要获取 WakeLocks,尽可能使用最低级别,并确保尽快释放它。

此外,根据其他一些帖子,电池消耗速度取决于您在服务中所做的事情的工作和有效性,因此这是我们在没有看到更多代码的情况下无法提供帮助的地方。:S

顺便说一句..恕我直言,如果你只是等待来电并且一直保持WAKE_LOCK,这可能是电池高消耗的原因。想想你需要什么,如果你不需要,尽量减少资源的使用他们..以WIFI_LOCK为例,尽快释放WAKE_LOCK..