其他分享
首页 > 其他分享> > Android URL在服务运行较长时间后不会连接

Android URL在服务运行较长时间后不会连接

作者:互联网

我不确定如何为这个问题打好标题.

我在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来检测某些通知的语言.

检测字符串是局部变量,Translator类不会在其他任何地方引用.首先我认为它可能以某种方式保持引用,因为我使用Translator类作为字段.但即使将翻译器移动到本地呼叫之后,问题仍然重新出现.

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

我是否错过了明显的或者这可能是Android中的一个错误?

作为脚注问题,是否有任何关于进行http呼叫的替代方案的建议?我查看了Volley,但这适用于回调,我不太热衷于对我的整个应用程序进行更改以适应这种情况.

UPDATE

我现在已经改变了代码并切换到Volley,即使在3天之后似乎工作正常,到目前为止一直很好,但问题仍然是为什么简单的Https连接在一段时间后失败了?我只是无法搞清楚……

解决方法:

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

标签:android,android-service,android-networking
来源: https://codeday.me/bug/20190710/1424428.html