gpt4 book ai didi

java - v4内容加载器的使用

转载 作者:行者123 更新时间:2023-12-02 11:42:08 24 4
gpt4 key购买 nike

这些天我正在尝试 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/

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