简体   繁体   中英

Service binding and Two activities Strange case

I understand about the SERVICE and luckily my android project works well. Until today I realized there's some strange effect when the variable stored in my Service is not updating. Especially when I pressed back button and returning to that activity.

Scenario:

You run the project on real device. Automatically Activity-A will be opened. As the code below, once the binding is succeed you'll store your navigation variable. Then you go to Activity-B . And just like before, your navigation will be stored as well. Then after couple seconds, you pressed back button. Returning your frame into Activity-A. Then When go to Activity-B again from here. And checking the navigation variable. It is not "ACTIVITY-B" ! Why is that happened like this?

Every Activity has the following methods and variables :

// == this is important for every Service communication
private MainServices serviceWorks;
private Intent serviceIntent;
private boolean myBindingState = false;

// connect to the service
private ServiceConnection serviceConn = new ServiceConnection() {

    @Override
    public void onServiceConnected(ComponentName arg0, IBinder arg1) {
        MainBinder myBinder = (MainBinder) arg1;
        serviceWorks = myBinder.getService();
        myBindingState = true;

        serviceWorks.setActivity(Chat2Activity.this);

// store either ACTIVITY-A or ACTIVITY-B 
        serviceWorks.setMyNavigationPosition(Nav.ACTIVITY-A);
        serviceWorks.setCurrentContext(getApplicationContext());


    }

    @Override
    public void onServiceDisconnected(ComponentName arg0) {
        myBindingState = false;
    }
};

@Override
protected void onStart() {
    super.onStart();
    if (serviceIntent == null) {
        serviceIntent = new Intent(this, MainServices.class);
        bindService(serviceIntent, serviceConn, Context.BIND_AUTO_CREATE);
        startService(serviceIntent);
    }

}

// == this is important for every Service ommunication
@Override
protected void onStop() {
    super.onStop();
    try {
        stopService(serviceIntent);
        unbindService(serviceConn);
    } catch (Exception e) {

    }
}

how do i move from one activity to another ? Using this code below:

// either Activity-A or B are stated called here
Intent i = new Intent(getApplicationContext(), ActivityA.class);
startActivity(i);

How to solve this case?

Try adding this code in both the activities.

protected void onResume()
   {
      super.onResume();
      if (myBindingState==true)
      serviceWorks.setMyNavigationPosition("B"); //Or "A"
   }

You may also move unbindService() to onDestroy() instead of onStop()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM