JavascriptProva

martedì 3 aprile 2018

Binding services. Mandala della activity principale.

Prima di passare ai Mandala dell'activity principale, mi studio il codice di connessione e disconnessione del service.
In OnStart:
    @Override
    protected void onStart() {
        super.onStart();
        Intent intent=new Intent(this,Servizio.class);
        bindService(intent,serviceConnection,BIND_AUTO_CREATE);


    }
La parte dell'Intent è come sempre.
La parte successiva implica il dover indicare l'intent, ma anche la serviceConnection e la costante BIND_AUTO_CREATE, che non mi è molto chiara, ma per il momento soprassediamo.


    @Override
    protected void onStop() {
        super.onStop();
        if(mBound){
            unbindService(serviceConnection);
            mBound=false;
        }
    }
Viene chiuso il service usando solo la serviceConnection e viene dichiarata false la variabile booleana mBound, che ho dimenticato di aggiungere nel metodo OnServiceConnected di ServiceConnection, mentre invece nel codice che ho consultato l'avevo messa in modo improprio.
Provo a fare un mandala di tutto, non prima di aver salvato tutta la main.
public class MainActivity extends AppCompatActivity {

    ServiceConnection serviceConnection=new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
            Servizio.LocalBinder myIBinder=(Servizio.LocalBinder)iBinder;
            Servizio myService=myIBinder.getService();
            myService.metodoPerVerifica();
        }

        @Override
        public void onServiceDisconnected(ComponentName componentName) {

        }
    };


    boolean mBound=false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }

    @Override
    protected void onStart() {
        super.onStart();
        Intent intent=new Intent(this,Servizio.class);
        bindService(intent,serviceConnection,BIND_AUTO_CREATE);


    }

    @Override
    protected void onStop() {
        super.onStop();
        if(mBound){
            unbindService(serviceConnection);
            mBound=false;
        }
    }


}

Parto da questo scheletro:
public class MainActivity extends AppCompatActivity {



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }
}


Ecco il Mandala ricostruito:
public class MainActivity extends AppCompatActivity {

    boolean mBound=false;

    ServiceConnection serviceConnection=new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
            Servizio.LocalBinder myIBinder=(Servizio.LocalBinder)iBinder;
            Servizio myService=myIBinder.getService();
            mBound=true;
            myService.metodoPerVerifica();

        }

        @Override
        public void onServiceDisconnected(ComponentName componentName) {

        }
    };


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }

    @Override
    protected void onStart() {
        super.onStart();
        Intent intent=new Intent(getApplicationContext(),Servizio.class);
        bindService(intent,serviceConnection,BIND_AUTO_CREATE);
    }

    @Override
    protected void onStop() {
        super.onStop();
        if(mBound){
            unbindService(serviceConnection);
            mBound=false;
        }
    }
}
Ora, se funziona, dovrebbe scrivermi in LogCat la parola "VERIFICA" secondo il metodo che ho creato nel Service.
Vediamo...

04-04 06:42:37.962 2148-2148/? I/System.out: VERIFICA
Perfetto!

Nessun commento:

Posta un commento