Android 按钮监听器生命周期

Android Button Listener lifecycle

我想确保我的应用尽可能高效地运行,并且正在研究 activity 生命周期。特别是,我在 activity onCreate 中创建了按钮 setOnClickListeners

据我了解,android可以在onPauseonStop之后清理资源。这是否意味着我必须检查侦听器是否仍然存在并在 onResume 中根据需要重新创建它们?当用户点击返回、主页、接听电话等时

是的,Android 可以清理资源,但不能清理内存中的运行时重要对象:-) 只要 Views 本身,您设置的 Listeners 就会保留在那里。但是,您在 Listeners 中引用的内容在调用时可能不存在,因此请确保检查您访问的对象是否不为 null :-)

如果您需要更深入地了解它,请阅读 Java gc 机制的工作原理:-) Activity 中的 Views 绑定到它的 gc 树,所以只要 Activity 在那里,它们就是安全的。当它被重新创建时,onCreate 将被再次调用 :-)

这里有一个简单的例子:

/** This is hand code, it won't compile most probably ^^ **/
public class myActivity extends Activity {
    private DataBase db;
    private Button button;

    public void onCreate(){
        db = /* init db somehow */
        button = (Button) findViewById(R.id.button);
        button.setOnclickListener(new OnClickListener() {
            public void onClick(View view) {
                db.doSomething();
            }
        });
    }

    public void closeDatabase() {
        db = null;
    }    
}

现在假设您出于某种原因调用了 closeDatabase() 方法。如果用户在此之后单击按钮,应用程序将崩溃并出现 NullPointerException。

这当然是一个直接的例子(即您在代码中使 db 对象为 null)但它可能会在系统内部自动发生并且(很少)因为 gc 可能会释放一些大的东西,比如图像。