java - 如何将数据从非 Activity 类传递到android中的 Activity ?

标签 java android android-intent

我正在构建我的应用程序,并使用 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 通信。

可以在这里找到“更好”的有趣答案:

Non-UI Fragment vs Singleton

关于java - 如何将数据从非 Activity 类传递到android中的 Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17795831/

相关文章:

java - 高效的 Minkowski 和计算

java - 如何更改Android中的任务关联性?

android - 使用 Intent 打开下载的文件

java - Intent Android : click the button text is not transferred and show nothing

java - 在 Android/Java 中可以将代码传递给服务类吗?

java - 有没有办法为 @AllArgsConstructor (lombok) 的所有参数设置 'not null'

java - Java 中的二分查找结果错误

java - onActivityResult 无法正常工作

android - clientID 有什么用?

android - Appcenter 找不到 APK 文件