Bagaimana cara mengakses semua anggota dan metode dalam aktivitas saat ini melalui satu metode instan?

Halo Komunitas Stack Overflow. Saat ini saya sedang mengerjakan aplikasi VoIP Android yang menggunakan WebRTC dan oleh karena itu saya mencoba memahami kode sumber yang saya temukan di GitHub. Sejauh ini, saya telah dapat mereproduksi dan memahami sedikit kode sumber yang saya temukan, namun saat ini saya menemukan masalah dengan implementasi SignalingClient. Untuk lebih memahami masalah saya, saya rasa tepat untuk menjelaskan lebih detail dan mengajukan pertanyaan dengan lebih tepat:

Bagaimana cara mengakses semua anggota dalam aktivitas saat ini, tanpa mendeklarasikan objeknya dari a kelas, melalui satu metode instance, yang didefinisikan di kelas lain yang sama?

Saya pikir menunjuknya dalam kode sumber juga bagus untuk memahami pertanyaannya. Saya telah mempersingkat kodenya sehingga sedekat mungkin dengan pertanyaan.

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);
        */
...
 }
...
}

Setelah bereksperimen dan mencari di web [1][2][3][4] dan banyak pertanyaan stackoverflow terkait lainnya. Saya perhatikan bahwa perilaku ini ada hubungannya dengan statis pengubah menurut sumber berikut [5][6][7] tetapi juga fakta itu

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

kelas, anggota instance dan juga metode getInstance semuanya memiliki/berbagi "nama" yang sama seperti yang dapat kita lihat pada baris komentar di atas . Kembali ke pertanyaan saya, saya benar-benar ingin tahu cara kerjanya, atau apakah ini merupakan trik untuk mengakses semua anggota dan metode yang mungkin (dan hal-hal lain yang saya belum tahu) tanpa mendeklarasikan suatu objek. Saya akan sangat menghargai jawaban apa pun yang diikuti dengan penjelasan yang baik untuk topik ini serta memberikan beberapa sumber/tutorial/skrip universitas yang bagus, dll. Di mana saya dapat membaca tentang ini. Terima kasih banyak.


person Fermit    schedule 16.04.2020    source sumber
comment
Pertanyaan Anda ditandai untuk dimoderasi karena Anda adalah pembuat poster baru. Masukan: pertanyaan bagus... Anda memberikan banyak dukungan yang menunjukkan bahwa Anda berupaya keras. Saya menyarankan menambahkan tag voip dan webrtc karena saya melihat banyak pertanyaan lain menggunakan tag ini. Saya harap Anda mendapatkan jawaban yang bagus. Saya memperbarui pertanyaan Anda.   -  person buzz3791    schedule 16.04.2020
comment
Pak, saya menghargai tanggapan Anda. Memang saya menambahkan informasi sebanyak-banyaknya mengenai topik ini, namun sejujurnya saya menolak gagasan untuk menambahkan terlalu banyak informasi yang bisa mengarah ke arah yang salah. Terima kasih banyak atas rekomendasi Anda untuk tag serta upvote Anda, sangat membantu dan dihargai!   -  person Fermit    schedule 16.04.2020
comment
Itulah pola tunggalnya.   -  person Johannes Kuhn    schedule 18.04.2020
comment
Pak, itu menjawab pertanyaan saya! Terimakasih banyak atas jawaban Anda!   -  person Fermit    schedule 18.04.2020