我跟着这篇文章https://proandroiddev.com/detecting-when-an-android-app-backgrounds-in-2018-4b5a94977d5c来实现android生命周期,但是在java上有Application类的遗留应用上。
如何在java中实现这个kotlin代码?
<?xml version="1.0" encoding="UTF-8"?>
<server description="new server">
<!-- Enable features -->
<featureManager>
<feature>jsp-2.2</feature>
</featureManager>
<featureManager>
<feature>adminCenter-1.0</feature>
</featureManager>
<!-- Define the host name for use by the collective.
If the host name needs to be changed, the server should be
removed from the collective and re-joined. -->
<variable name="defaultHostName" value="localhost" />
<!-- Define an Administrator and non-Administrator -->
<basicRegistry id="basic">
<user name="admin" password="********" />
<user name="nonadmin" password="***********" />
</basicRegistry>
<!-- Assign 'admin' to Administrator -->
<administrator-role>
<user>admin</user>
</administrator-role>
<keyStore id="defaultKeyStore" password="*******" />
<!-- To access this server from a remote client add a host attribute to the following element, e.g. host="*" -->
<httpEndpoint id="defaultHttpEndpoint"
host="*"
httpPort="9080"
httpsPort="9443" />
<!-- Automatically expand WAR files and EAR files -->
<applicationManager autoExpand="false"/>
</server>
我觉得这是一个愚蠢的问题,但我不熟悉懒惰的初始化,我不知道如何搜索这个问题,任何&#34;懒惰的理论链接&#34;也欢迎。
答案 0 :(得分:7)
private SampleLifecycleListener sll;
public synchronized SampleLifecycleListener getSampleLifecycleListener() {
if (sll == null) {
sll = new SampleLifecycleListener();
}
return sll;
}
这样就不会在调用getter之前初始化它。
答案 1 :(得分:2)
从Java 8开始,您可以使用ConcurrentHashMap#computeIfAbsent()
来实现懒惰。 ConcurrentHashMap
是线程安全的。
class Lazy {
private final ConcurrentHashMap<String, SampleLifecycleListener> instance = new ConcurrentHashMap<>(1);
public SampleLifecycleListener getSampleLifecycleListener() {
return instance.computeIfAbsent("KEY", k -> new SampleLifecycleListener()); // use whatever constant key
}
}
你可以像
一样使用它SampleLifecycleListener sll = lazy.getSampleLifecycleListener();
答案 2 :(得分:0)
如果愿意,可以从Java调用Kotlin lazy
:
import kotlin.Lazy;
Lazy<SampleLifecycleListener> lazyListener = kotlin.LazyKt.lazy(() -> new SampleLifecycleListener()));
SampleLifecycleListener realListener = lazyListener.getValue();