gpt4 book ai didi

android - 在 Android MVP 中将 BroadcastReceiver 放在哪里?

转载 作者:IT老高 更新时间:2023-10-28 23:25:00 32 4
gpt4 key购买 nike

我有一个接收网络连接事件的 BroadcastReceiver 实现。它在 AndroidManifest.xml 中声明,当网络事件发生时由 Android 自动调用。

广播接收者:

public class ConnectivityChangeReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
Log.v(TAG, "action: " + intent.getAction());
Log.v(TAG, "component: " + intent.getComponent());
}
}

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.test">

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
...
<receiver
android:name=".ConnectivityChangeReceiver"
android:enabled="true">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
</application>

</manifest>

我想为我的应用使用此处描述的 Google MVP 示例架构:

https://github.com/googlesamples/android-architecture/tree/todo-mvp/

使用上面的架构,只是想知道:

  1. 我的 BroadcastReceiver 应该放在哪里?

  2. 如果我的 BroadcastReceiver 需要写入数据库,最好的方法是什么?

  3. 如果我的 BroadcastReceiver 需要更新 UI,最好的方法是什么?

最佳答案

  1. 就我个人而言,我认为应该将来自 BroadcastReceiver 的事件传递给演示者。
  2. 基于语句 1,presenter 持有对应该处理 db 操作的 Interactor/Contract/Use case 的引用。

    BroadcastReceiver --event--> Presenter --> Interactor ---> 存储库

  3. 基于语句 1,演示者应该再次消费事件并调用 View 。

    BroadcastReceiver --event--> Presenter --> (可能做一些事情,业务逻辑) ---> 查看

这是我所拥有的,一个总结我所说的最小示例 fragment :

  private class NetworkBroadcastReceiver23 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//... redacted code.../
boolean connected = activeNetworkInfo != null && activeNetworkInfo.isConnected();
mPresenter.onConnectionChanged(activeNetworkInfo,connected);
}
}

将接收器放在 Activity 中,因为您从那里将事件流式传输到演示者。这将简化对演示者进行连接更改的测试。很难实现平台事件的关注点分离,我想让我的层不受 android sdk 组件和类的影响。 Alex Shutov 指出的另一种方法是混合 MVP 和 Observer 模式,如果您将 BroadcastReceiver 视为外部实体,而不是事件源。

是的,我同意您可以通过去掉 NetworkInfo 参数来改进该方法。

关于android - 在 Android MVP 中将 BroadcastReceiver 放在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39658993/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com