为什么活动中的静态变量在活动不在前台时不会更新

时间:2014-07-26 12:08:55

标签: android

我有一个活动 - MainActivity和一个服务 - MainService(在清单中声明服务在另一个进程中运行)

MainService(实施LocationListener)我有:

  1. in onStartCommand() - 我获取经度和纬度值并将其作为额外值发送到广播中。为onLocationChanged()
  2. 做同样的事情

    MainActivity

    1. 两个static double变量 - latitud& longitud
    2. 开始按钮 - 启动服务。用以下方法注册广播接收器。

       private void strtBrdCast()  {
      
           IntentFilter intntFilter = new IntentFilter();
           intntFilter.addAction("MyBroadcast");
      
          mReceiver = new BroadcastReceiver() 
          {
              @Override
              public void onReceive(Context context, Intent intent) 
              {
                  latitud = intent.getDoubleExtra("xLat",0);
                  longitud = intent.getDoubleExtra("xLon",0);
      
                  txtVwLati.setText(String.valueOf(latitud));
                  txtVwLongi.setText(String.valueOf(longitud));
              }
          };
          //registering our receiver
          this.registerReceiver(mReceiver, intntFilter);
      }
      
    3. 停止按钮 - 停止服务。

    4. onResume()活动:检查我的服务。如果服务可用,则将经度纬度值从静态变量设置为textBoxes
    5. 工作正常 - 当我使用Emulator控件发送位置时。当我按下后退按钮并返回活动时,即使是服务仍然可用。但是静态变量没有得到更新,也没有在textBoxes中显示位置值。

      是否因为活动不在前台而不能接收任何广播?

      我还尝试从service-in onLocationChanged()更新活动的静态变量。也不起作用。

      -------- ----------已编辑

      如果我在服务类中使用静态变量并在活动的onResume()上检索它们。为什么它也不起作用?

1 个答案:

答案 0 :(得分:0)

取决于您取消注册广播接收器的位置,因为您的活动在后台,您无法更新活动的TextView,解决方法是将值分配给静态变量,然后更新您的{{1在TextViewsonCreate()方法中。