关于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中使用另一个线程。
答案 0 :(得分:0)
确定你可以在广播接收器中使用另一个线程。广播接收器onRecieve()方法在UI主线程中运行。因此onRecieve绝不能花费大量时间执行。 一般来说,启动服务通常比启动一个线程更好。但是你可能有其他理由在广播接收器中使用一个线程。所以它完全可以使用。
答案 1 :(得分:0)
在您的示例代码中,使用了新线程来创建该任务。线程将继续运行,但是在您完成OnReceive()
之后,接收器将被终止。
请注意,无法保证线程可以生存多长时间。系统可能承受内存压力,因此会立即删除您的进程,并且print
将永远不会执行。
正确的方法是启动前台服务,这将使您的进程具有更高的优先级。
答案 2 :(得分:-2)
是..你可以在广播接收器onReceive()方法中使用多个线程;