我可以使用另一个线程在BroadcastReceiver.onReceive中执行长期操作

时间:2014-10-30 09:28:19

标签: android broadcastreceiver

关于BroadcastReceiver.onReceive,android docs asys: 如果通过标记启动此BroadcastReceiver,则从该函数返回后该对象不再处于活动状态。     但我的测试代码说不同。

 @Override
public void onReceive(Context context, Intent intent) {
    new Thread(new Runnable() {

        @Override
        public void run() {
            **System.out.println("thread in:" + System.currentTimeMillis());**
            try {
                Thread.sleep(10000);
            **System.out.println("thread finish:"
                    + System.currentTimeMillis());**
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }
    }).start();
}

它会打印线程和线程完成,好像我可以在onReceive中使用另一个线程。

3 个答案:

答案 0 :(得分:0)

确定你可以在广播接收器中使用另一个线程。广播接收器onRecieve()方法在UI主线程中运行。因此onRecieve绝不能花费大量时间执行。 一般来说,启动服务通常比启动一个线程更好。但是你可能有其他理由在广播接收器中使用一个线程。所以它完全可以使用。

答案 1 :(得分:0)

在您的示例代码中,使用了新线程来创建该任务。线程将继续运行,但是在您完成OnReceive()之后,接收器将被终止。

请注意,无法保证线程可以生存多长时间。系统可能承受内存压力,因此会立即删除您的进程,并且print将永远不会执行。

正确的方法是启动前台服务,这将使您的进程具有更高的优先级。

答案 2 :(得分:-2)

是..你可以在广播接收器onReceive()方法中使用多个线程;