在BroadcastReceiver中启动新线程是否安全?

sda*_*bet 6 android broadcastreceiver

我需要在一个网络中执行网络操作BroadcastReceiver.

到目前为止,我通过启动一个新线程来实现它:

@Override
public void onReceive(Context context, Intent intent) {
    new Thread(new Runnable() {
        public void run() {
            // network stuff...
        }
    }).start();
}
Run Code Online (Sandbox Code Playgroud)

在线程完成之前,进程是否有被杀死的风险?

是否更好地使用IntentService?还有其他更好的方法?

Com*_*are 9

在线程完成之前,进程是否有被杀死的风险?

如果这个接收器是通过清单注册的,是的.

如果此接收器是通过注册的registerReceiver(),则进程的生命周期将由其他运行组件确定.

是否更好地使用IntentService?

如果这项工作将持续几毫秒,恕我直言,是的,可能与之一致WakefulBroadcastReceiver.

还有其他更好的方法?

一个goAsync()选项可以BroadcastReceiver在触发ANR之前为您提供在另一个线程中工作的时间窗口.我避免这样做,因为它的记录很少.例如,它没有直接解决您的问题:当后台线程正在执行其工作时,进程的重要性是什么?这是否能使设备保持足够长的时间才能完成工作?等等.我将使用一种IntentService或其他形式Service,我对合同有更好的理解.