【问题标题】:BroadcastReceiver for BOOT_COMPLETED not returning from sleep()BOOT_COMPLETED 的 BroadcastReceiver 未从 sleep() 返回
【发布时间】:2012-05-04 10:38:56
【问题描述】:

我有一个对 BOOT_COMPLETED 做出反应的 BroadcastReceiver。反过来它会发出一个意图,但是这个意图应该延迟一段时间。出于某种原因,如果 sleep() 调用的参数大于大约。 6000 毫秒,睡眠永远不会返回(我从未在下面的代码中看到“睡眠完成!”消息)。也没有抛出异常。低于 6000 毫秒一切正常!

任何想法如何解决这个问题都会很棒!

public class BootReceiver extends BroadcastReceiver
{   
    @Override
    public void onReceive( final Context context, final Intent intent)
    {                  
        Thread thr = new Thread ()
        {
            @Override
            public void run()
            {
                Log.e ( "Test", "Going to sleep!" );

                try {
                   sleep(8000);
                } catch (InterruptedException e) { e.printStackTrace(); }

                Log.e ("Test","Sleep done!");
            }
        };
        thr.start();
    }
}

【问题讨论】:

    标签: android broadcastreceiver sleep delay bootcompleted


    【解决方案1】:

    我有一个对 BOOT_COMPLETED 做出反应的 BroadcastReceiver。反过来它会发出一个意图,但是这个意图应该延迟一段时间。

    那么您应该使用AlarmManagerset()PendingIntent 在您指定的延迟后关闭。

    由于某种原因,如果 sleep() 调用的参数大于大约。 6000 毫秒,睡眠不再返回(我从未在下面的代码中看到“睡眠完成!”消息)。

    您有 BroadcastReceiver 等效于“应用程序无响应”(ANR) 条件,因为您占用主应用程序线程的时间过长。

    也没有抛出异常。

    是的,但是在 LogCat 中有一个警告——至少,曾经有过。

    【讨论】:

    • 顺便说一句:我使用威胁来避免 ANR。但无论如何,现在有了 AlarmManager 就可以了。谢谢!
    猜你喜欢
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多