Как получить доступ ко всем членам и методам в текущей активности через один метод экземпляра?

Здравствуйте, сообщество переполнения стека. В настоящее время я работаю над приложением Android VoIP, которое использует WebRTC, и поэтому я пытался понять исходный код, который я нашел на GitHub. До сих пор мне удавалось воспроизвести и понять часть найденного мной исходного кода, но сейчас я наткнулся на проблему с реализацией SignalingClient. Чтобы лучше понять мою проблему, я думаю, что уместно быть более подробным и задать вопрос более точно:

Как получить доступ ко всем членам в текущей активности, не объявляя ее объект из class через один метод экземпляра, который определен в том же другом классе?

Я думаю, что указание на него в исходном коде также полезно для понимания вопроса. Я сократил код, чтобы он максимально соответствовал вопросу.

SignalingClient.java

class SignallingClient {
    private static SignallingClient instance;
    private String roomName = null;
    private Socket socket;
    boolean isChannelReady = false;
    boolean isInitiator = false;
    boolean isStarted = false;
    private SignalingInterface callback;
...
 public static SignallingClient getInstance() {
        if (instance == null) {
            instance = new SignallingClient();
        }
        if (instance.roomName == null) {
            //set the room name here
            instance.roomName = "vivek17";
        }
        return instance;
 }

 public void init(SignalingInterface signalingInterface) {
...
 }
...
}

MainActivity.java

public class MainActivity extends AppCompatActivity implements View.OnClickListener, SignallingClient.SignalingInterface {
...
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED
            || ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO}, ALL_PERMISSIONS_CODE);
        } else {
            // all permissions already granted
            start();
        }
    }
...
 public void start() {
        // keep screen on
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

        initViews();
        initVideos();
        getIceServers();

        SignallingClient.getInstance().init(this); //Here is my lack of understanding/reproducing/comprehending, 
                                                   //because at this point I have access to all members(variables) 
                                                   //in the SignalingClient.java class : boolean isChannelReady, 
                                                   //boolean isInitiator, boolean isStarted
                                                   //and also other methods which are public...
        //Shouldnt it be like this?
        /*
        SignalingClient obj = new SignalingClient();
        obj.getInstance();
        obj.init(this);
        */
...
 }
...
}

После экспериментов и поиска в Интернете [1][2][3][4] и многие другие вопросы, связанные с переполнением стека. Я заметил, что это поведение как-то связано с static модификатор согласно этим источникам [5][6][7], но и тот факт, что

class SignallingClient{...                        //SignallingClient
private static SignallingClient instance;...      //SignallingClient
public static SignallingClient getInstance() {... //SignallingClient

класс, элемент экземпляр, а также метод getInstance имеют/имеют одно и то же "имя", как мы можем видеть в комментариях к строке выше. . Возвращаясь к моему вопросу, я действительно хотел бы знать, как это работает, или это трюк для доступа ко всем возможным членам и методам (и другим вещам, которых я еще не знаю) без объявления объекта. Я был бы очень признателен за любой ответ, за которым следует хорошее объяснение этой темы, а также за добавление некоторых хороших источников/учебников/университетских сценариев и т. д., где я могу прочитать об этом. Большое спасибо.


person Fermit    schedule 16.04.2020    source источник
comment
Ваш вопрос был помечен для модерации, так как вы новый автор. Обратная связь: отличный вопрос... вы оказали огромную поддержку, которая показывает, что вы приложили много усилий. Я бы предложил добавить теги voip и webrtc, так как я вижу много других вопросов, использующих эти теги. Я надеюсь, что вы получите отличный ответ. Я проголосовал за ваш вопрос.   -  person buzz3791    schedule 16.04.2020
comment
Сэр, я ценю ваш отзыв. Действительно, я добавил столько информации, сколько мог по этой теме, но, честно говоря, я отказался от мысли добавить слишком много информации, которая могла бы пойти в неправильном направлении. Большое спасибо за вашу рекомендацию по тегам, а также за ваш голос, очень полезно и ценно!   -  person Fermit    schedule 16.04.2020
comment
Это шаблон синглтона.   -  person Johannes Kuhn    schedule 18.04.2020
comment
Господа, это ответ на мой вопрос! Большое спасибо за ответ!   -  person Fermit    schedule 18.04.2020