我知道Android Activities有特定的生命周期,onCreate应该被覆盖并用于初始化,但是构造函数究竟发生了什么?是否有任何情况可以/应该覆盖Activity构造函数,或者你是否应该触摸它?
我假设永远不应该使用构造函数,因为引用不会被Activities完全清理(从而妨碍垃圾收集器),那onDestroy就是为此目的.它是否正确?
这是我在处理更复杂系统时经常遇到的问题,而且我从来没有想过要解决的好方法.它通常涉及共享对象主题的变体,其构造和初始化必然是两个不同的步骤.这通常是因为体系结构要求,类似于applet,因此建议我合并构造和初始化的答案是没有用的.系统最迟必须以Java 4为目标,因此建议仅在以后的JVM中提供支持的答案也没有用.
举个例子,假设我有一个类,它被构造成适合应用程序框架,如下所示:
public class MyClass
{
private /*ideally-final*/ SomeObject someObject;
MyClass() {
someObject=null;
}
public void startup() {
someObject=new SomeObject(...arguments from environment which are not available until startup is called...);
}
public void shutdown() {
someObject=null; // this is not necessary, I am just expressing the intended scope of someObject explicitly
}
}
Run Code Online (Sandbox Code Playgroud)
我无法使someObject成为final,因为在调用startup()之前无法设置它.但我真的希望它反映它的一次写入语义,并能够从多个线程直接访问它,最好避免同步.
我的想法是表达和执行一定程度的最终性,我猜想我可以创建一个通用的容器,就像这样(UPDATE - 更正此类的线程化代码):
public class WormRef<T>
{
private volatile T reference; // wrapped reference
public WormRef() {
reference=null;
}
public WormRef<T> init(T val) …Run Code Online (Sandbox Code Playgroud)