2012-05-04 65 views
1

我有一個BroadcastReceiver,它在BOOT_COMPLETED上作出反應。反過來,它會發出一個打算,但這個打算應該推遲一段時間。出於某種原因,如果sleep()調用的參數大於約。 6000毫秒,睡眠永遠不會返回(我從來沒有看到下面代碼中的「睡眠完成!」消息)。也沒有拋出異常。 6000ms以下一切正常!BroadcastReceiver for BOOT_COMPLETED不從睡眠返回()

任何想法如何解決這將是偉大的!

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(); 
    } 
} 

回答

2

我有上BOOT_COMPLETED反應的廣播接收器。反過來,它會發出一個打算,但這個打算應該推遲一段時間。

那麼你應該使用AlarmManagerset()一個PendingIntent您指定的延遲後熄滅。

由於某些原因,如果sleep()調用的參數大於約。 6000毫秒,睡眠永遠不會返回(我從來沒有看到下面代碼中的「睡眠完成!」消息)。

由於您將主應用程序線程綁定了太長時間,因此您的BroadcastReceiver等效於「應用程序未響應」(ANR)條件。

也沒有例外拋出。

是的,但在LogCat中有一個警告 - 至少,曾經是。

+0

順便說一句:我用威脅來避免ANR。但無論如何,現在與AlarmManager它的作品。謝謝! – Bernd