java - 我应该使用哪个选项将上下文传递给 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
推荐阅读
- ios - 点击按钮时的图片和文字。SwiftUI
- angular - DevTool 文件系统不会将 index.html 网络资源映射到本地文件
- javascript - 如何单击一个按钮,侦听该单击,如果在特定浏览器上...添加另一个程序化单击?
- css - 仅对背景使用关键帧旋转
- azure-data-factory - 我正在使用 Azure 数据工厂中的查找来仅更新新数据,但我遇到了错误,我不明白为什么
- cortex-m - 无法追踪 Cortex M0 上的硬故障
- html - div不显示
- flutter - 调用 setState() 时 Flutter FutureBuilder 不更新
- azure - Azure Monitor 工作簿模板
- sql - ORA-00936: 执行查询时缺少表达式