【发布时间】:2022-02-04 16:21:54
【问题描述】:
在我的项目中,我正在尝试使用单例类在其中存储数据。当我试图从 Service 类访问它时,它会创建新实例而不是使用以前的 Singleton 实例。我在 github 上阅读了很多帖子,但找不到有效的答案
我的单身课程
import android.util.Log;
import com.softelnet.ksavi.android.model.AttachmentRequest;
import java.util.LinkedList;
public class AttachmentsUpdateQueue {
private static class Holder {
private static final AttachmentsUpdateQueue singleInstance = new AttachmentsUpdateQueue();
}
private AttachmentsUpdateQueue() {
Log.d("pox", "new instance");
}
private LinkedList<AttachmentRequest> attachmentsQueue = new LinkedList<>();
public static AttachmentsUpdateQueue getInstance() {
return Holder.singleInstance;
}
public AttachmentRequest getAttachmentForUpload() {
Log.d("pox", "get, size:" + attachmentsQueue.size());
if (attachmentsQueue.size() > 0) {
return attachmentsQueue.get(0);
} else {
return null;
}
}
public int getSize() {
return attachmentsQueue.size();
}
public void addAttachmentForUpload(AttachmentRequest attachment) {
attachmentsQueue.addLast(attachment);
Log.d("pox", "added, size:" + attachmentsQueue.size());
}
}
向单例添加数据
AttachmentsUpdateQueue.getInstance().addAttachmentForUpload(new AttachmentRequest(oprCtx.getUser(),task.getId(),attachment,isAttribute));
从单例中获取数据
AttachmentRequest req = AttachmentsUpdateQueue.getInstance().getAttachmentForUpload();
【问题讨论】:
-
它在哪里创建一个新实例?
-
创建单例的最佳方法是使用 Java 枚举。快速阅读:baeldung.com/java-singleton
-
当我尝试访问服务类中的单例时。第一次尝试以创建一个新实例结束
-
你为什么要为 Singleton 询问一些“持有人”类而不是询问 Singleton 本身?
-
@hfontanez ,因为我试图以各种方式对其进行编码,希望我能找到一个可行的方法
标签: java android multithreading service singleton