Android 应用架构 - RxJava

Android app architecture - RxJava

我正在开发一个 android 应用程序(主要是尝试使用 RxJava/Android 来解决问题)。这些是我的要求:

我正在使用单例 User 实例来维护全局状态,并使用 SharedPreferences 来持久化。现在我正在尝试使用 RxAndroid 来通知视图的更改,但我对如何去做一无所知。

我们如何跟踪 User 中的变化?我可以使用 User 中的设置器从可观察对象发出吗?如果是这样,我该怎么做?

如果有人也能提供代码示例,我将不胜感激。

P.S。这是我的 User class 定义的示例,我没有使用任何设置器。

public class User {
  public String userName;
  public String emailId;
  public List<Friend> friends;

  public User() {
    friends = new ArrayList<Friend>();
  }
}

public class Friend {
  public String userName;
  public String emailId;
  public String role;
}

这只是我的用户 class 的示例骨架(我已经剥离了其他所有内容),我只需要知道这些字段的设置器是什么样子的,如果这种方法是甚至被认为是正确的,或者是否有更好的选择。

如果您需要更多信息,请告诉我。

我会使用来自 RxJava 的 PublishSubject http://reactivex.io/RxJava/javadoc/rx/subjects/PublishSubject.html 和来自它的 Activtiy subscribe/unsubsribe 的 onResume/onPause。

在用户中创建 PublishSubject

public class User {
  public PublishSubject<User> stream = PublishSubject.create()
  public String userName;
  public String emailId;
  public List<Friend> friends;

  public User() {
    friends = new ArrayList<Friend>();
  }
  public void setName(String name){
         stream.onNext(this);
  }
}

因此,当您使用方法 setName of User class(如您所提到的单例)时,订阅该 Steam 的所有内容都会收到回复。喜欢

 public class MyActivity extends Activity{

            private TextView nameTextView ;
            private Subscription subs;
            @Override
            public void onCreate{
            //initialization of fields
            }

            @Override
            public void onResume(){
              super.onResume();
              subs = User.getInstance().stream.subscribe{user-> nameTextView.setText(user.username) }
          }

             @Override
             public void onPause(){
             super.onPause();
             subs.unsubscribe();
             }
    }