有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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);
        }
    }
}

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


共 (2) 个答案

  1. # 2 楼答案

    更好的方法是:

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

    说明:lambda表达式属于当前方法的范围,因此它可以直接访问此