我正在构建我的应用程序,并使用 socket.io 与网络服务器进行通信。我有java文件来处理那些不是 Activity 的并且在后台运行的文件。因此,要启动它们,它将在 Activity 中实例化并且套接字将运行。现在,网络服务器触发我在回调中处理的消息并将数据传递给 Activity 。现在,我正在寻找将数据从正在运行的非 Activity 类传递到当前正在运行的 Activity 的最佳方法。
我之前所做的是使用由非 Activity 类创建的 Intent ,该类将数据发送到当前正在运行的 Activity 。必须将 Activity 更改为 singleinstance 或 singletop,以避免 Activity 继续自行重新启动。 问题是,从我的主要 Activity 中,我无法使用单顶部启动模式,因为我需要 Activity 在某些情况下自行刷新。
所以我无法让套接字在主要 Activity 上正常工作,因为如果我将主要 Activity 更改为单顶,我只能接收数据,这对于应用程序来说并不理想。我首先尝试在 Activity 中命名一个由非 Activity 类调用的函数,但似乎这是非法的,所以我被困在这里。
@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");
}
}
}
这是发送数据的非 Activity 类中的方法。
@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));
}
}
这是在 mainactivity 中捕捉 Intent 的地方。不理想。
最佳答案
我认为您可能会发现使用 Singletons
或非 UI Fragment
很有帮助。如果您尚未在 UI 中使用 Fragments,那么您绝对应该 look into it因为它是现代 Android 应用程序的法律标准。更重要的是,Android 支持库为 Fragments 提供了一直追溯到 Android 1.6 的功能,这是向后兼容的理想选择。
您同样可以使用Handlers
在线程之间传递数据和消息。这些基本上提供了一个管道,您可以向其中发布
消息和handleMessage
。您可能会在 Application
onCreate
中启动网络内容,并可能将线程存储为singleton
。然后,您将对 UI Handler
的引用传递给该线程,然后该线程可以通过发布 Runnables
直接与您的 UI 通信。
可以在这里找到“更好”的有趣答案:
关于java - 如何将数据从非 Activity 类传递到android中的 Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17795831/