如何在 Android 中的活动之间进行通信

How to communicate between activities in Android

我是 Android 的新手(但不是 java),我对 Services、ViewModel、Broadcast things 和其他用于在 Activity 之间进行通信的替代方案感到困惑。我的沟通需求非常基本。

考虑 Midiscope's MainActivity. I want to do something like that, but with the Spinner to select the source on a different Activity. Basically one Activity for the Spinner (call it "SettingsActivity" but obviously cannot be a true Settings for reasons too long for this margin) and another Activity for the UI with the TextView, call it TextViewActivity. I am somewhat able to make it work if I share static variables to access the TextViewActivity from the Settings, so that I can create LoggingReceiver from the Settings but binding it to the TextViewActivity instead of Settings (this)。显然这是不对的(TM),所以我尝试了所有可能的选项 google 都无济于事。完成此操作的最简单方法是什么?

如果你想将一些基本数据从一个 activity 传递到另一个你应该使用 Intent

使用方法:

Activity1(向Activity2发送数据):

Intent intent = new Intent(context, TextViewActivity.class);
intent.putExtra("EXTRA_SESSION_ID", sessionId);
startActivity(intent);

Activity2(从Activity1接收数据):

String sessionId = getIntent().getStringExtra("EXTRA_SESSION_ID");

问题是我在考虑 "Desktop" 开发模式 java(例如使用 Swing),其中 windows 是持久对象,不像 Android 活动随时来来去去。

我的解决方案是将 LoggingReceiver 构造函数设为私有,并使用单例模式将 LoggingReceiver 设为自己的工厂(即使用 getInstance() 方法返回唯一的 static实例存在)。然后 SettingsActivityTextViewActivity 都可以访问它。前者负责将接收器链接到正确的 MIDI 源,后者将自己注册为 ScopeLogger。显然,我还需要一个 setScopeLogger()(由 TextViewActivity 在其 onCreate() 中调用)和 LoggingReceiver.onSend() 中的一些空检查,如果未设置 mLogger,因为原始代码假设这会在构造函数中发生。但是这部分 "business as usual" 在 java.