Android URL在服务运行较长时间后无法连接

Android URL在服务运行较长时间后无法连接,android,android-service,android-networking,Android,Android Service,Android Networking,我甚至不知道如何给这个问题起个好标题 我的Android应用程序中有以下类: class Translator { public Translator() { } public String bingTranslate(String text) throws IOException { String response; String textEncoded= URLEncoder.encode(text, "utf-8");

我甚至不知道如何给这个问题起个好标题

我的Android应用程序中有以下类:

class Translator {
    public Translator() {
    }

    public String bingTranslate(String text) throws IOException {

        String response;
        String textEncoded= URLEncoder.encode(text, "utf-8");

        String url = "https://www.bing.com/tdetect";
        URL obj = new URL(url);
        HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();

        con.setRequestMethod("POST");
        //con.setRequestProperty("User-Agent", USER_AGENT);
        con.setRequestProperty("Accept-Language", "UTF-8");

        con.setDoOutput(true);
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(con.getOutputStream());
        outputStreamWriter.write("text="+textEncoded);
        outputStreamWriter.flush();


        BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
        response=in.readLine();
        in.close();
        con.disconnect();

        return response;

    }
}
我这样称呼它:

detected = new Translator().bingTranslate(text.substring(0, Math.min(text.length(), 100)));
这绝对可以,但是在我的服务运行了很长一段时间(比如一天左右)后,URL无法连接,并抛出连接失败的错误。强制停止服务并重新启动它会使整个思考重新开始

我的服务正在扩展NotificationListenerService,因此它总是在运行,并尝试使用Bing来检测某些通知的语言

detect
字符串是一个局部变量,
Translator
类不在其他任何地方引用。首先,我认为它可能会以某种方式保留引用,因为我使用了Translator类作为字段。但即使在将翻译转移到本地电话后,问题仍然再次出现

我注意到,当连接失败时,URL会抛出它连接失败的错误:
https://www.bing.com/204.79.197.200:443
这不是我用来打电话的URL字符串

我是没有注意到明显的问题,还是这可能是安卓系统的一个缺陷

作为一个脚注问题,有没有关于进行http调用的替代方案的建议?我看了一下,但这对回调是有效的,我不太热衷于对我的整个应用程序进行更改以适应这种情况

更新


现在,我已经更改了代码,并切换到3天后仍能正常工作的版本,到目前为止还不错,但问题仍然是为什么简单的Https连接在一段时间后会失败?我只是没能弄明白…

看看你的问题,我假设你希望服务无限期地运行,但它只运行了一天并抛出异常。 我认为,由于安卓团队引入了一些限制,安卓操作系统正在限制您的服务运行更长的时间。您的服务无法运行更长的时间,因为长时间运行的服务将消耗大量电池和Android CPU资源。 如果您使用的是后台服务,那么这不是实现长期运行服务的合适解决方案,我建议您使用前台服务,并让应用程序显示一条通知,这不会让安卓操作系统破坏您的服务。
希望这有帮助。

我知道后台服务重启,也知道前台服务。这里不是这样。该服务运行正常。该服务的所有其他功能都正常工作,只是URL连接调用未按预期工作。为什么不使用改型?它是一个广泛使用的REST库。您甚至可以只在一个类中替换请求,而在其他类中保留它们。@CoolMind-我到目前为止还没有听说过任何链接。204.79.197.200:443是bing.com的IP地址。这是一件事。这里是改造:一个很酷的图书馆!您也可以将其用于反应式java。