服务绑定和两个活动奇怪的情况

时间:2014-08-26 10:28:57

标签: android variables android-intent service destroy

我了解服务,幸运的是我的android项目运作良好。直到 今天我意识到当我的服务中存储的变量没有更新时会有一些奇怪的效果。特别是当我按下按钮并返回该活动时。

情境:

您在真实设备上运行该项目。 自动活动-A 将被打开。如下面的代码,一旦绑定成功,您将存储您的导航变量。 然后你去 Activity-B 。就像以前一样,您的导航也将被存储。几秒后,你按下了后退按钮。 将您的帧返回到Activity-A。然后从这里再次访问Activity-B。并检查导航变量。它不是“ACTIVITY-B”!为什么会这样?

每个活动都有以下方法和变量

// == 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) {

    }
}

我如何从一项活动转移到另一项活动? 使用以下代码:

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

如何解决此案?

1 个答案:

答案 0 :(得分:1)

尝试在两个活动中添加此代码。

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

您也可以将unbindService()移动到onDestroy()而不是onStop()