java - v4内容加载器的使用

标签 java android socket.io

这些天我正在尝试 Android Java 中的 Socket.IO 实现。我在 Google 上找到了一个 2 年前的样本。查看他的源代码后我发现他使用了 android.support.v4.content.Loader<D>他记录的原因是:

we are using a Loader to manage the socket to make it persisted across Activity instances that happen when rotating.

我的第一个问题是我不明白这个说法。这是否意味着当设备旋转时它将创建不同的 Activity 实例?这是正确的吗?

在 Android 文档中 link其中提到:

Used to write apps that run on platforms prior to Android 3.0. When running on Android 3.0 or above, this implementation is still used; it does not try to switch to the framework's implementation.

再次不清楚...:(

他已连接到 LoaderonForceLoad()并在 onReset() 中断开连接方法。

我的另一个问题是,我应该使用它还是有其他更好的方法(从它诞生 2 年来)?

最佳答案

  • 在轮换(以及其他一些事件)时, Activity 会被销毁并重新创建。这就是 Android 的工作原理。
  • 另一件事只是说,如果您将 v4.loader 放入代码中,即使在较新的设备上运行,它也会使用 v4。这里没什么好担心的。
  • 是的,那是 2 岁了。 Loader 的创建是为了尝试解决一个问题,并且只是创建了更多问题。我不建议任何人使用它。

如果您只需要在 1 个 Activity 中使用套接字,我推荐的是架构组件中的 ViewModel。

为此,您可以将此依赖项添加到您的 gradle 文件中:

 implementation "android.arch.lifecycle:viewmodel:1.1.0"

然后创建 ViewModel 来保存套接字:

public class SocketViewModel extends AndroidViewModel {

    public SocketViewModel(Application app) {
       // add here code to start/open/initialise the socket
    }

    @Override public void onCleared() {
       // add here code to close/finialse the socket
    }

    // create a get() or some other method to interface your Activity to your socket code

}

最后在您的 Activity 上调用此方法来获取 ViewModel:

private SocketViewModel socketModel;

@Override public void onCreate(Bundle savedInstance) {
     super.onCreate(savedInstance);
     ... your view init ...

     socketModel = ViewModelProviders.of(this).get(SocketViewModel.class);
}

这将使您的套接字在旋转时不会出现问题。

关于java - v4内容加载器的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48474626/

相关文章:

android - 如何混淆 Android 库模块

node.js - Socket.io 的连接事件太多,有什么坏处吗?

java - Hibernate Criteria 和行数限制

java - eclipse插件中的OSGI list

java - Android 自定义 WebView 无法找到加载的 HTML 中定义的 javascript 函数

javascript - 发出的事件是否会产生大量负载,即使它们没有被监视?

javascript - 用户套接字 ID 是关键信息吗? (安全 Angular )

java - JPA 查询调用 getter 数百万次

android - 删除预定的 Facebook 页面帖子 : pages_manage_engagement are not available 时出现错误

java - 如何检查时间(分钟/秒)是否在给定的时间间隔内?