我有一个应用程序在Android上使用多个活动。 与服务器的连接由Socket.IO通道管理。
目前我正在普通类中初始化socket.on事件。
然而,由于这个“套接字”类在应用程序启动时初始化,因此在不同的活动之外,我无法直接从那里操纵我的视图。
我想避免在活动中编写我的听众,因为有些接收器是常见的(例如认证部分,在整个应用程序中都有效)。
这是方案:
我不知道我是否清楚,不要犹豫再向我询问详细信息。
由于
Alex
答案 0 :(得分:2)
我会做这样的事情:
1 - 创建一个界面:
public interface OnSocketListener {
void method(); //add some methods to comunicate between your class and your activities
}
2 - 让你的听众从你的班级打来电话:
public class SocketClass {
private OnSockectListener mListener;
public void setListener(OnSockectListener listener) {
mListener = listener;
}
private void someEvent() {
if (mListener != nul) {
mListener.onSomeEvent(Data data);
}
}
}
3 - 有一个实现监听器的基本活动并实现了通用实现,其余的没有实现,所以其他活动必须覆盖它:
public abstract class BaseActivity extends ActionBarActivity implements OnSocketListener {
public void commonMethod() {
//Some Implementation that it's common to all
}
}
4 - 让您的其他活动继承该基础活动:
public class SomeActivity extends BaseActivity {
//implements all the others methods
}
如果您想共享同一个套接字,可以将其设为单身:
public class SocketClass {
private OnSockectListener mListener;
private static SockectClass mInstance;
private SocketClass() {
}
public SockectClass getInstance() {
if (mInstance == null) {
mInstance = new SockectClass();
}
return mInstance;
}
public void setListener(OnSockectListener listener) {
mListener = listener;
}
private void someEvent() {
if (mListener != nul) {
mListener.onSomeEvent(Data data);
}
}
}
答案 1 :(得分:1)
你冷创建一个BoundService并将套接字放在那里。您的活动将绑定到服务并调用方法。
或者您可以使用LocalBroadcastManager或EventBus与您的Socket.class进行通信。