收藏
回答

小程序切后台息屏挂起5分钟后发送请求,服务器接收不到请求?

小程序使用web-view打开测试页面,切后台息屏挂起5分钟后再次打开小程序,点击按钮发送请求,服务器接收不到请求

小程序APPID:wx0c8626ebb206cb1e

测试微信号:danxiabing

日志上传时间:2025-01-10 17:55

下面是测试过程和测试代码:

这是打开测试页面,没有切后台息屏挂起5分钟时,点击按钮正常发送请求接收响应的情况

这是打开测试页面,切后台息屏挂起5分钟后,点击按钮发送请求的情况,120秒仍然没有收到服务器响应

这是服务器接口C#代码

[HttpGet]
public string GetHomeMallList7()
{
    var s = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
    Utilities.WriteLog(s);//服务器日志,正常时有记录,异常是没有记录,能证明是服务器没有接收到请求,而不是客户端没接收到
    return s;
}


这是测试页面HTML代码

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<body style="font-size:40px;">
    <a onclick="clickFn(this);this.onclick=''" style="font-size:1em">点击请求服务器</a>
    <p id="start"></p>
    <p id="ing"></p>
    <p id="end"></p>
    <script>
        var start = null;
        var end = null;
        var num = 0;
        var timer = null;
        function clickFn() {
            //记录客户端发送请求时间
            start = new Date();
            document.getElementById("start").innerHTML = "客户端发送请求时间:" + DateTimeToString(start);
            //定时器,证明脚本还活着
            var ing = document.getElementById("ing");
            timer = setInterval(function () {
                ing.innerHTML += (num += 10) + "秒过去仍然没有返回,当前时间:" + DateTimeToString(new Date()) + "<br/>";
            }, 10000);
            //发送请求
            fetch('/API/CWeb/GetHomeMallList7')
                .then(response => {
                    //清除定时器
                    clearInterval(timer);
                    timer = null;
                    //记录客户端接收服务器响应时间
                    end = new Date();
                    document.getElementById("end").innerHTML = "客户端接到响应的时间:" + DateTimeToString(end) + ",时间差:" + (end - start) + "毫秒";
                    if (response.ok) {
                        return response.json();
                    }
                    throw new Error();
                })
                .then(data => {
                    //记录服务器返回的时间(服务器接收到客户端请求的时间)
                    data = new Date(data);
                    ing.innerHTML += "服务端接到请求的时间:" + DateTimeToString(data) + ",时间差:" + (data - start) + "毫秒<br>备注:客户端和服务端有时间差,测试前需确认时间差<br>   经测试,测试手机和服务器时间差为2100毫秒左右";
                })
                .catch(error => {
                    document.getElementById("end").innerHTML = "失败返回";
                });
        }
        //时间转字符串
        function DateTimeToString(time) {
            const year = time.getFullYear();
            const month = (time.getMonth() + 1).toString().padStart(2, '0');
            const day = time.getDate().toString().padStart(2, '0');
            const hours = time.getHours().toString().padStart(2, '0');
            const minutes = time.getMinutes().toString().padStart(2, '0');
            const seconds = time.getSeconds().toString().padStart(2, '0');
            const milliseconds = time.getMilliseconds().toString().padStart(3, '0');

            return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}.${milliseconds}`;
        }
    </script>
</body>
</html>


回答关注问题邀请回答
收藏

2 个回答

  • 拾忆
    拾忆
    01-10

    正常,除非是播放背景音乐和后台定位API,其他的都不支持挂起常驻后台。

    01-10
    有用
    回复 1
    • 单侠丙
      单侠丙
      01-11
      我这种情况应该属于挂起状态吧,虽然挂起后js线程会停止,但重新进入前台状态时事件和接口会恢复才对。
      01-11
      回复
  • 单侠丙
    单侠丙
    01-10

    测试手机:Redmi K70 至尊版

    测试微信:Version 8.0.53

    测试系统:澎湃 2.0.13.0.VNNCNXM、Android 15

    01-10
    有用
    回复
登录 后发表内容