【问题标题】:Socket connection lost and foreground service is kill by OS after some time套接字连接丢失,前台服务在一段时间后被操作系统杀死
【发布时间】:2019-08-09 07:07:06
【问题描述】:

我有一个带有 socket.IO 的聊天应用程序并与服务器建立连接。我不知道女巫服务和进程在待机以及手机不充电或何时使用大量内存时关闭。 当我在模拟器上测试应用程序时,一切正常,但在真实设备上有时应用程序会断开连接,或者有时会终止服务。

我尝试在服务中的 onCreate 方法中使用唤醒锁和 wifilock,并且通常在 20 分钟后断开连接。就像我又增加了几分钟,但连接又丢失了。

public void onCreate() {
        super.onCreate();
        PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
        PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Hi-tech::PowerWakeLock");
        wl.acquire(10000);
        WifiManager wm = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
        WifiManager.WifiLock wifiLock = wm.createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF , "MyWifiLock");
        wifiLock.acquire();

【问题讨论】:

    标签: android socket.io foreground-service


    【解决方案1】:

    您的目标是哪个 sdk 版本?如果您的目标是 >25,那么这表明唤醒锁在您的情况下没有用。

    作为 Android 8.0(API 级别 26)为延长电池寿命而引入的更改之一,当您的应用进入缓存状态且没有活动组件时,系统会释放应用持有的所有唤醒锁。

    缓存状态进一步解释:

    已经运行了很长时间(例如 30 分钟或更长时间)的服务的重要性可能会被降级,以允许它们的进程下降到下面描述的缓存 LRU 列表中。这有助于避免出现内存泄漏或其他问题的长时间运行服务消耗过多 RAM 以致于阻止系统有效使用缓存进程的情况。

    这不是解决问题的方法,但可能是一种解释。

    【讨论】:

    • 是的,我的目标是 >25 sdk 版本。你有什么建议吗?我需要稳定的服务和连接,超过 30 分钟。如果它耗尽电池没问题,我只需要不杀死服务和稳定连接。我尝试让应用在电池选项中不进行优化,但没有帮助
    猜你喜欢
    • 1970-01-01
    • 2021-07-02
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 2021-11-16
    相关资源
    最近更新 更多