在android中实现构造函数的正确方法是什么,尤其是在应用程序上下文中?

在android中实现构造函数的正确方法是什么,尤其是在应用程序上下文中?,android,constructor,android-context,Android,Constructor,Android Context,在android中实现构造函数的正确方法是什么 似乎在一个活动或服务中,“onCreate()”就是神奇之处 我问的原因是因为我想确定我做的事情是正确的 属性,然后在onCreate中设置属性值 // Activity launched via an Intent, with some 'extras' public class SomeActivity extends Activity { private Context context; private String foo

在android中实现构造函数的正确方法是什么

似乎在一个活动或服务中,“onCreate()”就是神奇之处

我问的原因是因为我想确定我做的事情是正确的 属性,然后在onCreate中设置属性值

// Activity launched via an Intent, with some 'extras'
public class SomeActivity extends Activity {

    private Context context;
    private String foo;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Set the object attribute for later use, good or Bad to do this?
        context = getApplicationContext();
        Intent fooIntent = getIntent();
        foo = fooIntent.getStringExtra("foo");
    }

    private void someMethodThatNeedsContext() {
        // For example:
        Cursor c = this.context.getContentResolver().query(foo, xxx, xxx);
        // Or is it better practice to:
        // A) Pass the context as a local variable to this method
        // B) Use getApplicationContext() locally when needed
    }
}
也许这两种选择中的任何一种都是可以的,而我已经考虑过了?
您的任何具体阅读和/或建议都会对我非常有帮助。

您正在活动中编写一个方法,因此您可以在代码中的任何位置调用
getApplicationContext()
,您不需要使用局部变量:

Cursor c = getApplicationContext().getContentResolver().query(foo, xxx, xxx);

还请记住,活动本身是一个上下文(活动类是从上下文派生而来的),因此通常在需要提供上下文时(例如,在创建意图时:
新意图(this,…)
)可以使用
this

选项B-因为您可以调用
getApplicationContext()
来自活动类中的任何非静态方法。 事实上,活动也是从上下文派生的(在继承树的某个地方…),因此您可以只执行以下操作:

Cursor c = getContentResolver()....
您不必保留对上下文的引用,尤其是不是静态的,这可能会导致问题


您是正确的-因为您通常不为活动创建自己的构造函数,所以您将用于构造的代码放在
onCreate

是的,您正确的认为初始化应该在
onCreate()中进行
。您实际上既不需要存储对上下文的引用,也不需要调用
getApplicationContext()
。您的活动本身就是一个上下文,因此您只需在需要上下文的任何位置使用即可。例如,在活动中祝酒:

Toast.makeToast(this, "Some text", Toast.LENGTH_LONG).show();

有道理,我想我担心的是调用getApplicationContext会增加额外的开销,但听起来它只是一个getter,不需要任何特定的资源?不要使用
getApplicationContext()
,除非您确切知道为什么要使用
getApplicationContext()
。这是很少需要的。很好的建议,我不敢相信你们这么快就偏离了目标!