对Android广播接收器感到困惑&;服务

对Android广播接收器感到困惑&;服务,android,service,xamarin,broadcastreceiver,Android,Service,Xamarin,Broadcastreceiver,我有一些代码,希望跟踪可用的Wifi网络,无论应用程序是否工作 根据我在网上找到的一些样本,我做了以下工作: 注册一个合适的WakefulBroadcastReceiver 在接收器中,发出一个意图,启动我的一个意图服务 最后,在服务中分析结果并将其存储在静态变量中(整个流程都可以访问) 希望我的整个应用程序在一个进程中运行(我想有一天我看到了一个标志来指定这一点..不确定在哪里..) 现在我有几个问题: 为什么不在接收器中工作,为什么启动服务 为什么要使用唤醒接收器,而不仅仅是普通接收器?特

我有一些代码,希望跟踪可用的Wifi网络,无论应用程序是否工作

根据我在网上找到的一些样本,我做了以下工作:

  • 注册一个合适的WakefulBroadcastReceiver
  • 在接收器中,发出一个意图,启动我的一个意图服务
  • 最后,在服务中分析结果并将其存储在静态变量中(整个流程都可以访问)
  • 希望我的整个应用程序在一个进程中运行(我想有一天我看到了一个标志来指定这一点..不确定在哪里..)

    现在我有几个问题:

    • 为什么不在接收器中工作,为什么启动服务
    • 为什么要使用唤醒接收器,而不仅仅是普通接收器?特别是当工作被重定向到服务时
    • 我的服务和我的应用程序的活动会在同一个过程中吗?这是通过静态变量共享数据所必需的

      • 好的,有几件事。如果要与服务通信,需要使用ServiceConnection并通过“绑定”连接到它。如果在服务启动后绑定到该服务,则该服务将在活动生命周期之外的后台持久存在

        要绑定到服务,请执行以下操作:

            public ServiceConnection mServiceConnection = new ServiceConnection() {
            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
                // initialize the service and bind to the tracking service
                YourService.YourBinder binder = (YourService.YourBinder) service;
                mService = binder.getService();
                mBound = true;
                }
        
            @Override
            public void onServiceDisconnected(ComponentName name) {
                }
            };
        
        绑定器嵌套在服务中,用于返回服务的实例。因此,您可以使用一个服务在后台记录您的位置,并且仅在活动运行时与活动通信

        因此,您的服务将不在同一进程中--这是一个完全不同的线程

        您可以将数据存储在服务本身中,并通过 将公共getData()方法放入服务中;您可以使用上面分配的mService变量访问此方法


        最后,如果您希望从服务到活动进行通信,那么您将向广播接收器发送意图

        好的,有几件事。如果要与服务通信,需要使用ServiceConnection并通过“绑定”连接到它。如果在服务启动后绑定到该服务,则该服务将在活动生命周期之外的后台持久存在

        要绑定到服务,请执行以下操作:

            public ServiceConnection mServiceConnection = new ServiceConnection() {
            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
                // initialize the service and bind to the tracking service
                YourService.YourBinder binder = (YourService.YourBinder) service;
                mService = binder.getService();
                mBound = true;
                }
        
            @Override
            public void onServiceDisconnected(ComponentName name) {
                }
            };
        
        绑定器嵌套在服务中,用于返回服务的实例。因此,您可以使用一个服务在后台记录您的位置,并且仅在活动运行时与活动通信

        因此,您的服务将不在同一进程中--这是一个完全不同的线程

        您可以将数据存储在服务本身中,并通过 将公共getData()方法放入服务中;您可以使用上面分配的mService变量访问此方法


        最后,如果您希望从服务到活动进行通信,那么您将向广播接收器发送意图

        最后,如果要从服务与活动进行通信,则应向广播接收器发送意图。
        并非如您所说:“如果要与服务通信,则需要使用ServiceConnection并通过绑定连接到它”-因此使用绑定-它可以在两个方向上完美地工作
        最后,如果您想从服务与活动通信,那么您将向广播接收器发送一个意图。
        不是真的,正如您所说:“如果您想与服务通信,您需要使用ServiceConnection并通过绑定连接到它”-所以使用绑定-它可以完美地在两个方向上工作