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?还有其他更好的方法?
在线程完成之前,进程是否有被杀死的风险?
如果这个接收器是通过清单注册的,是的.
如果此接收器是通过注册的registerReceiver(),则进程的生命周期将由其他运行组件确定.
是否更好地使用IntentService?
如果这项工作将持续几毫秒,恕我直言,是的,可能与之一致WakefulBroadcastReceiver.
还有其他更好的方法?
有一个goAsync()选项可以BroadcastReceiver在触发ANR之前为您提供在另一个线程中工作的时间窗口.我避免这样做,因为它的记录很少.例如,它没有直接解决您的问题:当后台线程正在执行其工作时,进程的重要性是什么?这是否能使设备保持足够长的时间才能完成工作?等等.我将使用一种IntentService或其他形式Service,我对合同有更好的理解.