2

BOOT_COMPLETED に反応する BroadcastReceiver があります。次にインテントを発行しますが、このインテントはしばらく遅延する必要があります。何らかの理由で、sleep() 呼び出しのパラメーターが約よりも大きい場合。6000ms、スリープは返されません (以下のコードに「スリープ完了!」というメッセージは表示されません)。また、スローされる例外もありません。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があります。順番に意図を発行しますが、この意図はしばらく延期する必要があります。

次に、を使用AlarmManagerしてset()PendingIntent指定した遅延の後にオフにする必要があります。

何らかの理由で、sleep()呼び出しのパラメーターが約2より大きい場合。6000ms、スリープが戻ることはありません(以下のコードに「Sleepdone!」メッセージが表示されることはありません)。

BroadcastReceiverメインアプリケーションスレッドを長時間拘束したため、「アプリケーションが応答しない」(ANR)状態に相当します。

スローされる例外もありません。

はい、しかしLogCatには警告があります-少なくとも、以前はありました。

于 2012-05-04T11:54:35.017 に答える