2

我有一个对 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();
    }
}
4

1 回答 1

2

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

然后,您应该使用AlarmManagerto set()aPendingIntent在您指定的延迟后关闭。

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

您有BroadcastReceiver相当于“应用程序无响应”(ANR) 的情况,因为您将主应用程序线程占用了太长时间。

也没有抛出异常。

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

于 2012-05-04T11:54:35.017 回答