gpt4 book ai didi

java - 只有当前 Activity 类,应该得到监听器的回调,而不是所有类,java

转载 作者:行者123 更新时间:2023-11-30 01:42:39 25 4
gpt4 key购买 nike

这是Java相关的问题,我使用了一个实现接口(interface)的BaseActivity

import io.socket.IOAcknowledge;
import io.socket.IOCallback;
import io.socket.SocketIO;
import io.socket.SocketIOException;

/**
* Created by amit on 11/12/15.
*/
public class BaseActivity extends Activity implements IOCallback {

public ArrayList<Users> mUserList = new ArrayList<>();
public ArrayList<String> mRoomList = new ArrayList<>();


SocketIO mSocket;

{
try {
mSocket = new SocketIO(Constants.CHAT_SERVER_URL);
mSocket.connect(this);
} catch (Exception e) {
throw new RuntimeException(e);
}
}


@Override
public void onDisconnect() {

}

@Override
public void onConnect() {

}

@Override
public void onMessage(String data, IOAcknowledge ack) {

}

@Override
public void onMessage(JSONObject json, IOAcknowledge ack) {

}

@Override
public void on(String event, IOAcknowledge ack, Object... args) {

}

@Override
public void onError(SocketIOException socketIOException) {

}
}

因为 mSocket.connect(this); 应该只在我创建 BaseActivity 并且扩展到所有 Activity 后调用

例如

public class LoginActivity extends BaseActivity {
@Override
public void onMessage(JSONObject json, IOAcknowledge ack) {
try {
System.out.println("Server said:" + json.toString(2));
} catch (JSONException e) {
e.printStackTrace();
}
}

@Override
public void onMessage(String data, IOAcknowledge ack) {
System.out.println("Server said: " + data);
}

@Override
public void onError(SocketIOException socketIOException) {
System.out.println("an Error occured");
socketIOException.printStackTrace();
}

@Override
public void onDisconnect() {
System.out.println("Connection terminated.");
}

@Override
public void onConnect() {
System.out.println("Connection established");
}

@Override
public void on(String event, IOAcknowledge ack, Object... args) {

另一个类也有相同的

 public class ListOfActivity extends BaseActivity {
@Override
public void onMessage(JSONObject json, IOAcknowledge ack) {
try {
System.out.println("Server said:" + json.toString(2));
} catch (JSONException e) {
e.printStackTrace();
}
}

@Override
public void onMessage(String data, IOAcknowledge ack) {
System.out.println("Server said: " + data);
}

@Override
public void onError(SocketIOException socketIOException) {
System.out.println("an Error occured");
socketIOException.printStackTrace();
}

@Override
public void onDisconnect() {
System.out.println("Connection terminated.");
}

@Override
public void onConnect() {
System.out.println("Connection established");
}

@Override
public void on(String event, IOAcknowledge ack, Object... args) {

我的问题是,无论何时触发任何事件,堆栈中的所有 Activity 都会触发事件,而不仅仅是当前可见的 Activity

我可以通过带有 boolean 标志的 onResume onPause 来处理它,

但我认为我做错了,有没有其他方法请建议我

因为我只想调用这个mSocket.connect一次,但是它有监听器,所以我必须在每个类上实现

最佳答案

您可以使用服务。将所有套接字连接/断开连接方法保存在那里。将您的 Activities 绑定(bind)到此服务,以便您一次只能使用一个套接字。

另一种解决方案是使用单例。在您的情况下,单例是否是个好主意最好由您决定。尽管如此,如果您一心不想连接/断开每个 Activity 的套接字,请查看扩展 Application 类。(您创建的这个 Application 子类具有比 Activity 更长的生命周期。

看看herehere

此外,在任何情况下,使用适当的同步机制来确定哪个 Activity 正在通过共享套接字写入什么。

关于java - 只有当前 Activity 类,应该得到监听器的回调,而不是所有类,java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34228644/

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