JiangSrl 2023-09-25 16:55 采纳率: 0%
浏览 9

广播的onreceive无法后台运行

为什么broadcast的onreceive不会在后台触发?
我想监视网络代理中的变化并在发生变化时检测网络。 我在接收时输入登录信息。 当我在活动时,它可以正常登录。 但是,当我进入设置界面设置代理时,不会触发onreceive日志。 返回活动后将立即触发。 为什么是这样?

先谢谢所有回答这个问题的人了

public class NetworkReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("NetworkChange", "onReceiveTest 代理接收器接收到了: "+ intent.getAction());

        InternetConnectionStatusHelper internetConnectionStatusHelper = InternetConnectionStatusHelper.getInstance(context);
        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        ProxyInfo proxyInfo = connectivityManager.getDefaultProxy();
        if (proxyInfo != null) {
            String host = proxyInfo.getHost();
            int port = proxyInfo.getPort();
            Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(host, port));
            internetConnectionStatusHelper.setmProxy(proxyInfo);
            internetConnectionStatusHelper.checkConnection();
            Log.d("NetworkChange", "onReceive has: 代理");
        }else {
            internetConnectionStatusHelper.checkConnection();
            Log.d("NetworkChange", "onReceive: 无代理");
        }
    }

}


public class NetworkService extends Service {
    private final String TAG = "NetworkChange";
    BroadcastReceiver networkReceiver;
    @Override
    public void onCreate() {
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("android.intent.action.PROXY_CHANGE");
        networkReceiver = new NetworkReceiver();
        registerReceiver(networkReceiver,intentFilter);
        Log.d(TAG, "服务创建了");
      
        super.onCreate();
    }
}
  • 写回答

1条回答 默认 最新

  • linconi 2023-09-26 09:56
    关注

    broadcast 的onReceive方法默认在主线程中执行,无法在后台运行,所以进入设置界面设置代理时,不会触发onreceive日志,只有返回活动会再次触发

    评论

报告相同问题?

问题事件

  • 创建了问题 9月25日