对Android广播接收器感到困惑&;服务
我有一些代码,希望跟踪可用的Wifi网络,无论应用程序是否工作 根据我在网上找到的一些样本,我做了以下工作:对Android广播接收器感到困惑&;服务,android,service,xamarin,broadcastreceiver,Android,Service,Xamarin,Broadcastreceiver,我有一些代码,希望跟踪可用的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并通过绑定连接到它”-所以使用绑定-它可以完美地在两个方向上工作