【问题标题】:Why charging state of the phone affects my app's behavior为什么手机的充电状态会影响我的应用程序的行为
【发布时间】:2015-08-26 07:31:15
【问题描述】:

我有一个Runnable r,由handler.postDelayed(60*1000) 每分钟定期触发一次。我在真实设备上测试我的代码。

但是我注意到,当手机正在充电(AC 或 USB)时,它工作得很好,但如果手机断开连接,Runnable r 只会每 20 分钟运行一次,甚至更糟,几个小时。感谢您的帮助!

下面是代码:

private final Runnable listen_to_server = new Runnable(){
    public void run(){
        new Thread() {
            public void run() {
                try {

                    handler.sendMessage(handler.obtainMessage(PING_SERVER,"listen"));
                    synchronized (listen) {
                        listen.wait();
                    }
                    handler.postDelayed(listen_to_server, 50000);
                }
                catch (Exception e) {
                    e.printStackTrace();
                }

            }
        }.start();
    }
};

在处理程序中:

    handler=new Handler() {
        @Override
        public void handleMessage(final Message msg) {
            switch (msg.what) {
                case PING_SERVER:
                    String type = (String) msg.obj;
                    add_log("ping server"); // print to screen and Log.d
                    ...
                    ...
            }
        }
    }

【问题讨论】:

  • 发布您的可运行代码以及如何调用它
  • 你能贴一些代码吗?
  • 您的手机在未通过 USB 连接且屏幕关闭时可能会进入深度睡眠模式以节省电池电量。 AFAIK 计时器在深度睡眠时根本不会更新/不会经常更新。
  • @Michael 也许是这样,但我该如何解决这个问题。我不想让它睡觉

标签: android postdelayed


【解决方案1】:

参考this link,我认为问题可能出在他们所说的:

Android 不是实时操作系统。所有 postDelayed() 保证是它至少是毫秒数 指定的。除此之外,主要取决于主要的 应用程序线程正在做(如果你把它绑起来,它不能处理 Runnable),其次是设备上的其他内容 (服务以后台优先级运行,因此获得更少的 CPU 时间 比前景)。

如何解决这个问题?在this 帖子中,解决方案如下:

使用 AlarmManager 可能会获得更好的运气 长时间的延迟。处理程序最适合您的应用程序运行时的滴答声和超时 在前台。

所以尝试实现一个查看the doc.的AlarmManager

希望我有所帮助:)

【讨论】:

  • 感谢您的链接。但我的应用程序确实在前台——我什至杀死了所有其他应用程序——我希望让我的应用程序保持打开几个小时,每分钟运行一次可运行
  • @ZhangYifan 你试过使用服务吗?
  • 无论如何,不​​确定,但它是否正确 Runnable 的语法?我认为在运行之前你需要@Override,之后你不需要“新线程(){”。也许我错了,不知道
  • 也许我稍后会尝试使用服务...我需要可运行的新 Thread(),因为它需要执行无法在主线程上的网络内容。感谢@Override :) 但这似乎不是强制性的。
  • @ZhangYifan 对不起,我不知道还能做什么,也许有人可以帮助你更多:)
猜你喜欢
  • 2012-09-14
  • 1970-01-01
  • 2016-09-28
  • 1970-01-01
  • 2019-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-25
相关资源
最近更新 更多