首页 > 解决方案 > 我应该使用哪个选项将上下文传递给 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);
        }
    }
}

第一个选项似乎更方便(因为它更短),但是这样的代码会不会有任何行为问题?

标签: javaandroidrunnableandroid-context

解决方案


更好的方法是:

public class MainActivity extends AppCompatActivity {
    //...
    public void onButtonClick() {
        new Thread(() -> SomeMethod(this)).start();
    }
    //...
}

解释: lambda 表达式属于当前方法的作用域,所以它可以直接访问this


推荐阅读