通过全球变量进行通信服务和活动

时间:2014-08-13 08:06:09

标签: android android-activity service

您好我有一个服务运行并且每30秒获取一次位置(因为它在代码(1)中显示)我想存储位置随时可用 我的aproach是作为应用程序上下文中的全局变量存储(因为它在代码(2)和代码(1)中显示)所以,稍后我可以从MainActivity获取它,如代码(3)所示。

代码(1)

 public class LocationService extends Service{

 @Override
 public void onCreate(){

 // I have a service here from where I can get Location every 30 secs
  {
   Location location=// from android api get Location every 30 secs
  ((App)getApplication()).setLocation(location);
  }
 }

}

(2)

public class App extends Application{
Location mLocation;

public void setLocation(Location location){
  mLocation=location;
 }

public Location getLocation(){
  return mLocation;
 }

(3)

 public class MainActivity extends Activity{
 @Override
 public void onCreate(){
 Location location=((App)getApplication()).getLocation();
 }

}

我的问题是该方法有效吗?我看到通常用于广播或绑定服务和活动,我从未见过在服务和活动之间分享全局变量,¿为什么?。

任何讨论都很好。

1 个答案:

答案 0 :(得分:1)

你的方法是有效的。根据{{​​3}},您有以下选择:

  • 将数据置于意图
  • 单身类
  • 公共静态字段/方法
  • HashMap或WeakReferences to Objects
  • 使用sharedPreferences
  • 放入数据库

这些方法中的每一种都取决于具体情况。在我看来,最好将位置存储在静态字段中,并在服务中为该字段公开静态getter方法。