gpt4 book ai didi

Android 在屏幕关闭时断开 tcp 连接

转载 作者:可可西里 更新时间:2023-11-01 02:52:03 33 4
gpt4 key购买 nike

我的 Android 应用程序在前台服务中启动并保持 TCP 连接。该 Activity 使用 StartService() 来启动服务。该服务也在其自己的进程中启动。

这是服务OnStartCommand:

// Code is in C# using Xamarin but regular Java/Android answers are acceptable
public override StartCommandResult OnStartCommand (Intent intent, StartCommandFlags flags, int startId)
{
base.OnStartCommand (intent, flags, startId);

...

var ongoingNotification = new Notification (Resource.Drawable.icon, "Service running");
var pendingIntent = PendingIntent.GetActivity (this, 0, new Intent (this, typeof(MainActivity)), 0);
ongoingNotification.SetLatestEventInfo (this, "Service", "The service is running.", pendingIntent);
StartForeground ((int)NotificationFlags.ForegroundService, ongoingNotification);
return StartCommandResult.RedeliverIntent;
}

当手机屏幕打开时,连接正常,无论我的应用程序中的 Activity 是否打开。然而,在我关闭屏幕后不到 30 秒,我总是失去 TCP 连接。我的应用程序会自动重新连接,因此我可以恢复连接,但是当屏幕关闭时它会不断断开连接。我将其重新打开,一切正常,即使我的应用中的 Activity 未打开也是如此。

它可以连接到 Android 生命周期,但我不知道如何连接。根据我写入手机上文本文件的调试消息(连接 IDE 中的调试器时不会发生此问题),该服务似乎按预期运行,但连接不稳定。

我还测试了这个,无论是否选择了开发者选项中的“不保留 Activity ”,都没有改变。所以它至少应该与 Activity Lifecycle 没有任何关系。

为什么 Android 会断开我的 TCP 连接,但只有在屏幕关闭时才断开?

最佳答案

我通过获取部分 WakeLock 解决了这个问题当我的服务正在运行时。

private PowerManager.WakeLock mWakeLock;

public override void OnCreate ()
{
PowerManager pm = (PowerManager) GetSystemService(Context.PowerService);
mWakeLock = pm.NewWakeLock (WakeLockFlags.Partial, "PartialWakeLockTag");
mWakeLock.Acquire();
}

public override void OnDestroy ()
{
mWakeLock.Release();
}

如果我将来实现更节能的东西,我会更新这个答案。

关于Android 在屏幕关闭时断开 tcp 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21997901/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com