在 CountDownTimer 封闭范围内访问上下文
Accessing Context in a CountDownTimer enclosed scope
我正在制作一个 SplashActivity
,当我想将 SplashActivity
上下文传递到 运行 包含在 CountDownTimer
中的静态函数时遇到了问题使用 this
关键字和 getBaseContext()
方法的范围。
TL;DR
我想弄清楚如何访问封闭范围内的 SplashActivity
上下文,即 CountDownTimer
。
我试过的:
SplashActivity temp = this
我已经对 Activity
的 onCreate
方法做出了 SplashActivity temp = this;
声明,但决定这对我所做的所有 Activity
都无效,因为我必须为我制作的每个 Activity
class 声明 Activity
。
Context temp = this.getBaseContext();
和上面基本一样,但是对所有的都比较灵活Activity
但是在我看来还是对程序没有效果。
ClassName.staticFunction(super.getBaseContext());
这行不通,因为 CountDownTimer
不是 SplashActivity
的 extends
,尽管这种解决方案正是我正在寻找的解决方案。
代码:
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)
in 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
...
我正在制作一个 SplashActivity
,当我想将 SplashActivity
上下文传递到 运行 包含在 CountDownTimer
中的静态函数时遇到了问题使用 this
关键字和 getBaseContext()
方法的范围。
TL;DR
我想弄清楚如何访问封闭范围内的 SplashActivity
上下文,即 CountDownTimer
。
我试过的:
SplashActivity temp = this
我已经对
Activity
的onCreate
方法做出了SplashActivity temp = this;
声明,但决定这对我所做的所有Activity
都无效,因为我必须为我制作的每个Activity
class 声明Activity
。Context temp = this.getBaseContext();
和上面基本一样,但是对所有的都比较灵活
Activity
但是在我看来还是对程序没有效果。ClassName.staticFunction(super.getBaseContext());
这行不通,因为
CountDownTimer
不是SplashActivity
的extends
,尽管这种解决方案正是我正在寻找的解决方案。
代码:
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)
in 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
...