主要思想:
1、定义一个Interface,Activity实现这个,
2、实现一个单例类,类中有个Interface列表,Activity可以添加到这个列表中。
3、广播中有数据更新通知单例类,分发给各个Activity
Interface
public interface ObserverListener {void observerUpdata(String name);void observerIntValue(int key, int value);void observerStringValue(int key, String value);}
单例类
public interface SubjectListener {void add(ObserverListener observerListener);void notifyObserver(String content);void notifyIntValueChanged(int key, int value);void notifyStringValueChanged(int key, String value);void remove(ObserverListener observerListener);}public class ObserverManager implements SubjectListener{private static ObserverManager observerManager;private List<ObserverListener> list = new ArrayList<>();public static ObserverManager getInstance() {if(observerManager == null) {synchronized (ObserverListener.class) {observerManager = new ObserverManager();}}return observerManager;}@Overridepublic void add(ObserverListener observerListener) {list.add( observerListener);}@Overridepublic void notifyObserver(String content) {for(ObserverListener observerListener : list) {observerListener.observerUpdata(content);}}@Overridepublic void notifyIntValueChanged(int key, int value) {for(ObserverListener observerListener : list) {observerListener.observerIntValue(key, value);}}@Overridepublic void notifyStringValueChanged(int key, String value) {for(ObserverListener observerListener : list) {observerListener.observerStringValue(key, value);}}@Overridepublic void remove(ObserverListener observerListener) {if(list.contains(observerListener)) {list.remove(observerListener);}}}activitypackage com.r3ci.desktop;import android.Manifest;import androidx.annotation.NonNull;import androidx.appcompat.app.AppCompatActivity;import androidx.constraintlayout.widget.ConstraintLayout;import androidx.core.app.ActivityCompat;import androidx.core.content.ContextCompat;import com.r3ci.desktop.Observer.ObserverListener;import com.r3ci.desktop.Observer.ObserverManager;import com.r3ci.desktop.utils.AppInfo;import com.r3ci.desktop.utils.AppUtils;import com.r3ci.desktop.utils.DateTimeUtils;import com.r3ci.desktop.view.AppView;import java.util.List;public class MainActivity extends AppCompatActivity implements ObserverListener{private final static String TAG = "Desktop";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ObserverManager.getInstance().add(this);}@Overrideprotected void onDestroy() {super.onDestroy();if (netWorkReceiver != null) {unregisterReceiver(netWorkReceiver);}ObserverManager.getInstance().remove(this);}@Overridepublic void observerUpdata(String name) {runOnUiThread(()->{mDevName.setText(name);});}@Overridepublic void observerIntValue(int key, int value) {Log.d("main", "observerIntValue: " + key + ", " + value);runOnUiThread(()->{//do something});}@Overridepublic void observerStringValue(int key, String value) {Log.i("main", "observerStringValue: " + value);}}
广播
public class ChangeDevNameBroadcastReceiver extends BroadcastReceiver {public static final String ACTION = "com.r3ci.setDevNameBroadcast";@Overridepublic void onReceive(Context context, Intent intent) {Log.i("vvvv", "action:" + intent.getAction());if(intent.getAction().equals(ACTION)){String devName = intent.getStringExtra("devName");ObserverManager.getInstance().notifyObserver(devName);}}}AndroidManifest.xml<application>...<receiverandroid:name=".ChangeDevNameBroadcastReceiver"android:exported="true"><intent-filter><action android:name="com.r3ci.setDevNameBroadcast" /></intent-filter></receiver></application>