从静态方法启动Android Activity

Nat*_*han 8 android android-activity

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

Bir*_*dia 29

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

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);
    }

}
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 如果我们要调用startActivityForResult怎么办。 (2认同)

Tec*_*ist 18

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

class MyApp extends Application{

    private static Context mContext;

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

    public static Context getAppContext(){
       return mContext;
    }
}
Run Code Online (Sandbox Code Playgroud)

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