为什么手机的充电状态会影响我的应用的行为

时间:2015-08-26 07:31:15

标签: android postdelayed

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

但是我注意到,当手机正在充电(AC或USB)时,它运行良好,但如果手机断开连接,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(); } }; 只会每20分钟运行一次,甚至更糟,几个小时。谢谢你的帮助!

以下是代码:

    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
                    ...
                    ...
            }
        }
    }

在处理程序中:

typedef enum
{
    FSM_State1 = (1 << 0),
    FSM_State2 = (1 << 1),
    FSM_State3 = (1 << 2),
    FSM_StateError = (1 << 3)
} states_t;

1 个答案:

答案 0 :(得分:1)

参考this link我认为问题可能是,正如他们所说:

  

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

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

  

使用AlarmManager可能会有更好的运气   长时间延迟。您的应用程序是最好的蜱和超时处理程序   在前台。

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

的AlarmManager

希望我帮助过:)