我想从Android设备上的静态java方法开始一个活动。 我没有任何上下文或任何作为参数传递给静态函数。 为了启动活动,我必须使用当前运行方法将“startActivity”称为“this”指针。那么有没有办法获得当前的运行活动?
答案 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;
}
}
现在,您可以使用此静态方法访问应用中的任何位置上下文。