UI消息机制

//WeakReference 弱引用,当WeakReference指向的对象是null时,gc就会回收这个对象

public class SMUIManager {

private static SMUIManager instance;

public static synchronized SMUIManager instance() {

if (instance == null) instance = new SMUIManager();

return instance;

}

private List> activitys = new ArrayList>();

private SMUIManager() {

}

public void pushActivity(BaseActivity activity) {

activitys.add(new WeakReference(activity));

}

public void popActivity(BaseActivity activity) {

removeActivity(activity.getIdentifier());

}

private void removeActivity(String identifier) {

for (int i = 0; i < activitys.size(); i++) {

WeakReference weakActivity = activitys.get(i);

BaseActivity activity = weakActivity.get();

if (activity != null && activity.getIdentifier().equals(identifier)) {

activitys.remove(weakActivity);

}

}

}

//出现异常处理这个

public void popAllAcitvity() {

while (activitys.size() > 0)

popActivity();

}

public void popActivity() {

WeakReference weakActivity = activitys.get(activitys.size() - 1);

BaseActivity activity = weakActivity.get();

if (activity != null) {

activity.finish();

}

activitys.remove(weakActivity);

}

/**

* 发送状态的消息

* @param msgCode  消息码

* @param param

*/

public void sendMessage(final int msgCode, final Object param) {

for (int i = 0; i < activitys.size(); i++) {

WeakReference weakActivity = activitys.get(i);

final BaseActivity activity = weakActivity.get();

if (activity != null) {

activity.runOnUiThread(new Runnable() {

@Override

public void run() {

activity.onNotify(msgCode, param);

}

});}

}

}

public void sendDisMessage(final int msgCode, final Object param, final int stateCode) {

for (int i = 0; i < activitys.size(); i++) {

WeakReference weakActivity = activitys.get(i);

final BaseActivity activity = weakActivity.get();

if (activity != null) {

activity.runOnUiThread(new Runnable() {

@Override

public void run() {

activity.onDisNotify(msgCode, param, stateCode);

}

});}

}

}

}

public class BaseActivity extends FragmentActivity {

@Override

protected void onCreate(@Nullable Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//基类中注册消息

SMUIManager.instance().pushActivity(this);

}

//每一个子类activity,子类fragment都可以收到消息

public void onNotify(final int msgCode, final Object param) {

List fragments = getSupportFragmentManager().getFragments();

if (fragments == null) return;

for (int i = 0; i < fragments.size(); i++) {

Fragment fragment = fragments.get(i);

if (fragment instanceof BaseFragment) {

((BaseFragment) fragment).onNotify(msgCode, param);

}

}

}

//每一个子类activity,子类fragment都可以收到消息

public void onDisNotify(final int msgCode, final Object param, final int statuCode) {

List fragments = getSupportFragmentManager().getFragments();

if (fragments == null) return;

for (int i = 0; i < fragments.size(); i++) {

Fragment fragment = fragments.get(i);

if (fragment instanceof BaseFragment) {

((BaseFragment) fragment).onNotify(msgCode, param);

}

}

}

@Override

protected void onDestroy() {

////基类中注销消息

SMUIManager.instance().popActivity(this);

super.onDestroy();

}

}

你可能感兴趣的:(UI消息机制)