小编erd*_*ips的帖子

为什么android(6.0)系统在深度睡眠约1小时后会绕网络连接

深度睡眠一小时后,我在安卓的深度睡眠模式下遇到麻烦.这个问题只发生在Android 6+上.在Android <5上,问题不会发生.未经Android 5测试,因为没有设备可用.

设备配置:
我有两个Android 6设备,谷歌Nexus 5和HTC One M9.两个设备都配置为仅Wifi(没有SIM卡),并且wifi策略配置为alyways on(即使在睡眠模式下).

情况:
我有一个唤醒的广播接收器,当应用程序进入后台时,它会在AlarmManager.ELAPSED_REALTIME_WAKEUP上注册,每2分钟触发一次.如果应用程序到达前台,当应用程序暂停并释放时,wifi锁定也是准确的.

由于Android KitKat AlarmManager.setRepeating(...)是不可取的,在Android 6上我使用AlarmManager.setWindow(...)只有1秒的窗口.
每次接收器触发时,接收器(PendingIntent)将再次重新注册.

接收器工作简单.他应该只调用weburl(获取请求).在请求成功,超时或抛出异常后释放唤醒锁.

在清单中,WAKE_LOCK权限也存在.

问题:
当我将应用程序置于后台(接收器变为启用状态)然后关闭屏幕时,接收器每2分钟正确调用一次,但在约1小时后网络请求失败.

日志显示接收器也在1小时后被调用,只有网络请求失败.

源代码示例:

public class TestTools {
    private static final String LOG_TAG = TestTools.class.getSimpleName();

    public static String excuteGet(String targetURL) {
        try {
            URL obj = new URL(targetURL);
            HttpURLConnection con = (HttpURLConnection) obj.openConnection();
            con.setRequestMethod("GET");
            con.setConnectTimeout(10*1000);
            con.setReadTimeout(5*1000);

            int responseCode = con.getResponseCode();
            Log.d(LOG_TAG, "GET Response Code :: " + responseCode);

            if (responseCode == HttpURLConnection.HTTP_OK) { // success
                BufferedReader in = new BufferedReader(new …
Run Code Online (Sandbox Code Playgroud)

java android wlan wifi

3
推荐指数
1
解决办法
628
查看次数

标签 统计

android ×1

java ×1

wifi ×1

wlan ×1