我正在制作SplashActivity,当我想使用SplashActivity关键字和CountDownTimer方法将this上下文传递到在getBaseContext()封闭范围内运行的静态函数中时遇到问题。

TL; DR

我试图弄清楚如何在封闭的范围内访问SplashActivity上下文,即CountDownTimer

我尝试过的


SplashActivity temp = this

我已经对SplashActivity temp = this;onCreate方法进行了Activity声明,但是决定这对于我所做的所有Activity都无效,因为我必须为每个Activity类声明Activity我做了。
Context temp = this.getBaseContext();

基本上与上面相同,但是对所有Activity都更灵活,但我认为对于该程序仍然无效。
ClassName.staticFunction(super.getBaseContext());

这不会起作用,因为CountDownTimer不是extendsSplashActivity,尽管这种解决方案是我一直在寻找的解决方案。


代码:

SplashActivity.java

public class SplashActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        //...
        new CountDownTimer(3000,100) {
            //...
            public void onFinish() {
                MainActivity.StartActivity( SplashActivity.getBaseContext() );
                //SplashActivity. will throw an error, must replace
                finish();
            }
        }.start();
    }
}



MainActivity.java


public class MainActivity extends Activity {
    ...
    public static void StartActivity(Context mContext) {
        Intent act = new Intent(mContext, MainActivity.class);
        mContext.startActivity(act);
    }
}


我的期望:

MainActivity.StartActivity(something.getBaseContext) SplashActivity中运行CountDownTimer而不创建任何其他变量(由于内存优化),将创建一个MainActivity视图。

最佳答案

目前,我正在使用以下解决方案:

final Context self = this;


插入到:

public class SplashActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        final Context self = this; // HERE
        //...
        new CountDownTimer(3000,100) {
            public void onFinish() {
                MainActivity.StartActivity( self ); //HERE
    ...

09-07 03:05