现在Activity可以使用以下三种方式之一连接到服务:
我认为BroadcastReceivers是最简单的通信方式,但我想知道为什么以及何时使用其他方式?或者换句话说,在哪些情况下,信使或AIDL将是广播接收者使用的最佳做法?
Xav*_*ler 13
我大多倾向于使用LocalBroadcasts.它们基本上就像真正的广播一样,但只对您的应用程序可见.首先,你需要创建一个BroadcastReceiver像普通广播一样的东西:
private final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if(Intent.SOME_ACTION.equals(action)) {
// Do your work
}
}
};
Run Code Online (Sandbox Code Playgroud)
然后,您可以注册和取消注册BroadcastReceiver:
@Override
public void onResume() {
super.onResume();
IntentFilter intentFilter = new IntentFilter(Intent.SOME_ACTION);
LocalBroadcastManager manager = LocalBroadcastManager.getInstance(getActivity());
manager.registerReceiver(broadcastReceiver, intentFilter);
}
@Override
public void onPause() {
super.onPause();
LocalBroadcastManager manager = LocalBroadcastManager.getInstance(getActivity());
manager.unregisterReceiver(broadcastReceiver);
}
Run Code Online (Sandbox Code Playgroud)
最后,您可以从您Service或您应用程序中的任何其他位置发送广播,如下所示:
Intent intent = new Intent(Intent.SOME_ACTION);
LocalBroadcastManager manager = LocalBroadcastManager.getInstance(getActivity());
manager.sendBroadcast(intent);
Run Code Online (Sandbox Code Playgroud)
azi*_*kim 11
您可以使用BroadcastReceiver,当你想之间的通信Service,并Activity在应用程序中.
MessengerAIDL当您的应用程序需要与其他进程(IPC)通信时,主要使用和.在这种情况下,您的界面应该有一个Service定义Handler响应不同类型Message对象的接口.
现在的区别Messenger和AIDL是非常简单的.使用时Messenger,它会将所有请求排入单个线程.所以你Service不必是线程安全的.如果您希望Service同时处理多个请求,则可以AIDL直接使用.在这种情况下,您Service必须能够进行多线程并且可以构建为线程安全的.实际上Messenger是在顶部实现的AIDL.
为了更好地理解绑定服务
您还应该通过Handler检查BroadcastReceiver或Messenger的答案
| 归档时间: |
|
| 查看次数: |
5924 次 |
| 最近记录: |