java我应该使用哪个选项将上下文传递给MainActivity内部的自定义可运行的?
选项包括:使用MainActivity.this
或通过可运行构造函数传递上下文
第一种选择:
public class MainActivity extends AppCompatActivity {
//...
public void onButtonClick() {
new Thread(new Runnable() {
@Override
public void run() {
SomeMethod(MainActivity.this);
}
}).start();
}
//...
}
第二种选择:
public class MainActivity extends AppCompatActivity {
//...
public void onButtonClick() {
new Thread(new SomeRunnable(this)).start();
}
//...
private class SomeRunnable implements Runnable {
private final Context context;
public SomeRunnable(Context context) {
this.context = context;
}
@Override
public void run() {
SomeMethod(context);
}
}
}
第一个选项似乎更方便一些(因为它简单地更短),但是这样的代码会有任何行为问题吗
# 1 楼答案
将上下文保持在自己的范围内是很好的。因此,如果您需要
context
之外的Activity
,您可以使用getApplicationContext()
这里有更复杂的定义:What's the difference between the various methods to get a Context?
# 2 楼答案
更好的方法是:
说明:lambda表达式属于当前方法的范围,因此它可以直接访问此