我应该使用哪个选项将上下文传递给 MainActivity 中的自定义 Runnable?
Which option should I use to pass the context to a custom Runnable inside MainActivity?
选项是:使用 MainActivity.this
或通过 Runnable 构造函数传递上下文。
第一个选项:
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);
}
}
}
第一个选项似乎更方便一些(因为它更短),但是这样的代码会不会有任何行为问题?
更好的方法是:
public class MainActivity extends AppCompatActivity {
//...
public void onButtonClick() {
new Thread(() -> SomeMethod(this)).start();
}
//...
}
说明:lambda表达式属于当前方法的作用域,因此可以直接访问this
最好将上下文保持在自己的范围内。所以如果你需要 Activity
之外的 context
你可以使用 getApplicationContext()
.
这里有更复杂的定义:What's the difference between the various methods to get a Context?
选项是:使用 MainActivity.this
或通过 Runnable 构造函数传递上下文。
第一个选项:
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);
}
}
}
第一个选项似乎更方便一些(因为它更短),但是这样的代码会不会有任何行为问题?
更好的方法是:
public class MainActivity extends AppCompatActivity {
//...
public void onButtonClick() {
new Thread(() -> SomeMethod(this)).start();
}
//...
}
说明:lambda表达式属于当前方法的作用域,因此可以直接访问this
最好将上下文保持在自己的范围内。所以如果你需要 Activity
之外的 context
你可以使用 getApplicationContext()
.
这里有更复杂的定义:What's the difference between the various methods to get a Context?