如何解决我应该使用哪个选项将上下文传递给 MainActivity 内的自定义 Runnable?
选项是:使用 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
,最好将上下文保持在自己的范围内。因此,如果您需要 context
之外的 Activity
,您可以使用 getApplicationContext()
。
更复杂的定义在这里:What's the difference between the various methods to get a Context?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。