从静态方法启动Android Activity

时间:2013-11-18 09:24:19

标签: android android-activity

我想从Android设备上的静态java方法开始一个活动。 我没有任何上下文或任何作为参数传递给静态函数。 为了启动活动,我必须使用当前运行方法将“startActivity”称为“this”指针。那么有没有办法获得当前的运行活动?

2 个答案:

答案 0 :(得分:26)

您只能访问静态方法中的静态变量/对象。 所以你需要以这种方式实施

public class MainActivity extends Activity {
    private static Context mContext;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mContext = this;

    }

    public static void goToLoginActivity() {
        Intent login = new Intent(mContext, LoginActivity.class);
        mContext.startActivity(login);
    }

}

注意:但这不是正确的方法,这可能会导致窗口泄漏问题。

更好的方法是将活动/上下文对象作为参数传递给它。

public static void goToLoginActivity(Context mContext) {
            Intent login = new Intent(mContext, LoginActivity.class);
            mContext.startActivity(login);
        }

答案 1 :(得分:18)

在应用程序中创建一个类,扩展类Application,定义静态上下文并使用您的应用程序上下文初始化它。您可以从此类公开静态方法以访问已定义的静态引用。多数民众赞成。

class MyApp extends Application{

    private static Context mContext;

    public void onCreate(){
       mContext = this.getApplicationContext();
    }

    public static Context getAppContext(){
       return mContext;
    }
}

现在,您可以使用此静态方法访问应用中的任何位置上下文。