我正在构建我的应用程序,并且正在使用 socket.io 与网络服务器进行通信。我有 java 文件来处理那些不是活动并在后台运行的文件。所以要启动它们,它将在一个活动中实例化,并且套接字将运行。现在网络服务器触发我在回调中处理的消息并将数据传递给一个活动。现在我正在寻找将数据从正在运行的非活动类传递到当前正在运行的活动的最佳方法。
我之前所做的是使用由非活动类创建的意图,它将数据发送到当前正在运行的活动。必须将活动更改为单实例或单顶以避免活动继续自行重新启动。问题是,在我的主要活动中,我不能使用单顶启动模式,因为在某些情况下我需要活动自行刷新。
所以我无法让套接字在主要活动上正常工作,因为如果我将主要活动更改为单顶活动,我只能接收数据,这对于应用程序来说并不理想。我首先尝试在非活动类调用的活动中命名一个函数,但似乎这是非法的,所以我被困在这里。
@Override
public void on(String event, IOAcknowledge ack, Object... data) {
System.out.println("Server may have triggered event '" + event + "'");
if (event.equals("message")) {
System.out.println(data[2]);
Intent newIntent = new Intent(Chat.mContent, Chat.class);
Bundle extras=new Bundle();
extras.putString("name", (String)data[1]);
extras.putString("MSG", (String)data[2]);
newIntent.putExtras(extras);
Chat.mContent.startActivity(newIntent);
}
if (event.equals("ready")) {
System.out.println("Received the ready callback");
try{
Intent newIntent = new Intent(TabExercise.mContext, TabExercise.class);
newIntent.putExtra("ready", event);
TabExercise.mContext.startActivity(newIntent);
}catch(Exception e){
System.out.println("Caught an error");
}
}
}
这是发送数据的非活动类中的方法。
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Bundle extras=intent.getExtras();
if (intent.hasExtra("ready")) {
// Retrieve the message and call getMsg(String)
connect.starter(SaveSharedPreference.getName(TabExercise.this), SaveSharedPreference.getUserId(TabExercise.this));
}
}
这是主要活动中捕获意图的地方。不理想。