- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
在将 iPhone 应用程序移植到 android 的过程中,我正在寻找在应用程序内进行通信的最佳方式。 Intent 似乎是要走的路,这是最好的(唯一)选择吗? NSUserDefaults 在性能和编码方面似乎都比 Intent 轻得多。
我还应该添加我有一个状态的应用程序子类,但我需要让另一个 Activity 知道一个事件。
最佳答案
我找到的最佳等价物是 LocalBroadcastManager这是 Android Support Package 的一部分.
来自 LocalBroadcastManager 文档:
Helper to register for and send broadcasts of Intents to local objects within your process. This is has a number of advantages over sending global broadcasts with sendBroadcast(Intent):
- You know that the data you are broadcasting won't leave your app, so don't need to worry about leaking private data.
- It is not possible for other applications to send these broadcasts to your app, so you don't need to worry about having security holes they can exploit.
- It is more efficient than sending a global broadcast through the system.
使用它时,您可以说 Intent
相当于 NSNotification
.这是一个例子:
监视名为 "custom-event-name"
的事件通知的 Activity .
@Override
public void onCreate(Bundle savedInstanceState) {
...
// Register to receive messages.
// This is just like [[NSNotificationCenter defaultCenter] addObserver:...]
// We are registering an observer (mMessageReceiver) to receive Intents
// with actions named "custom-event-name".
LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
new IntentFilter("custom-event-name"));
}
// Our handler for received Intents. This will be called whenever an Intent
// with an action named "custom-event-name" is broadcasted.
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Get extra data included in the Intent
String message = intent.getStringExtra("message");
Log.d("receiver", "Got message: " + message);
}
};
@Override
protected void onDestroy() {
// Unregister since the activity is about to be closed.
// This is somewhat like [[NSNotificationCenter defaultCenter] removeObserver:name:object:]
LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);
super.onDestroy();
}
发送/广播通知的第二个 Activity 。
@Override
public void onCreate(Bundle savedInstanceState) {
...
// Every time a button is clicked, we want to broadcast a notification.
findViewById(R.id.button_send).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sendMessage();
}
});
}
// Send an Intent with an action named "custom-event-name". The Intent sent should
// be received by the ReceiverActivity.
private void sendMessage() {
Log.d("sender", "Broadcasting message");
Intent intent = new Intent("custom-event-name");
// You can also include some extra data.
intent.putExtra("message", "This is my message!");
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}
使用上面的代码,每次按钮 R.id.button_send
被点击,一个 Intent 被广播并被 mMessageReceiver
接收在 ReceiverActivity
.
调试输出应如下所示:
01-16 10:35:42.413: D/sender(356): Broadcasting message
01-16 10:35:42.421: D/receiver(356): Got message: This is my message!
关于Android 相当于 NSNotificationCenter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3947641/
现在我正在尝试编写一个函数来在屏幕上出现键盘时向上移动框架。我开始使用 NSNNotificationCenter。我的代码正在运行但不正确。当键盘出现时,我的 formView 向上移动,但是当我开
我想知道是否有可能在应用程序处于暂停状态时从 NSNotificationCenter 运行观察者,如果选择器需要播放音乐。基本上,它在歌曲结束时运行以重置队列。是否可以激活选择器,即使应用程序处于后
应用程序可以在内部使用 NSNotificationCenter让不同的部分相互通信,但是这可以扩展到不同的应用程序可以使用它进行通信吗? 编辑 :很抱歉关于 iOS 与 OSX 的混淆。我只添加了
我正在创建一个必须在 OS X 上作为特权帮助工具运行的服务器。在其中,我尝试使用 NSSocketPort , NSFileHandle ,和NSNotificationCenter在监听套接字上执
我需要在两个不同的控制台应用程序(观察者和客户端)之间进行通信。 在观察者应用程序中,我添加了以下代码: [[NSNotificationCenter defaultCenter] postNotif
我正在使用 NSNotificationCenter 在基于文档的应用程序中发送自定义通知。 基于文档的应用程序可以有许多打开的文档。理想情况下,我希望文档及其子文档仅接收在文档或其子文档中创建的通知
NSNotificationCenter 真的很酷,我们可以用它构建非常可扩展的应用程序。我的问题是:我们是否可以在应用程序中滥用 NSNotificationCenter,即密集使用它,还是它不是一
我一直在研究 NSNotificationCenter,我一直想知道您什么时候会使用自己的自定义通知中心而不是 defaultCenter?这样做的好处是什么? 请原谅我的无知,但似乎仅使用 defa
是平衡“addObserver”的标准: [[NSNotificationCenter defaultCenter] removeObserver:self] 在 viewWillDisappear
我使用以下行添加一个观察者: [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(itemDidFini
当我使用一个时,内存/处理的用途是什么: [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(dismis
我从调用多个NSNotifications的所有观察器选择器到没有一个起作用。是否存在我可能已禁用的XCode / Application设置,可能会导致此行为? 这个问题几乎影响到我已经注册为观察员
基本上,我正在尝试创建一个允许用户通过 Google 或 Facebook 登录的应用程序。我已经成功创建了整个登录过程,但是在显示 Facebook 个人资料图像时遇到了一个小问题。因此,当用户选择
我的应用程序中有一个 UITableview Controller ,一个 View Controller ,我正在尝试使用 NSNotificationCenter 将 NSDictionary 从
我是 iOS 开发的新手。我正在自己学习这个。我现在对什么是通知中心有点困惑。我通过网络搜索并研究了 nsnotification 中心。 我发布这个问题只是为了澄清我对 nsnotification
在我的一个类(class)中,我发布了一条通知: [[NSNotificationCenter defaultCenter] postNotificationName:@"ALERTNOTI" obj
我有一个读取条形码的类,当我读取条形码时,我会向 NSNotificationCenter 发送通知,如下所示。 -(void)barcodeData:(NSString *)barcode type
我使用 NSNotificationcenter 来实现连接变化的事件监听器。当用户连接或断开 WiFi 网络时。当应用程序处于暂停模式时,是否可以将此通知发送到应用程序? 必须可以做到这一点,以 S
我正在使用 NSNotificationCenter,监听器使用以下代码订阅: [[NSNotificationCenter defaultCenter] addObserver:self
在我的应用程序中,我需要检测 ImagePicker 是否准备好拍照。我在这里找到了解决方案:How to know if iPhone camera is ready to take picture
我是一名优秀的程序员,十分优秀!