android - 通过全局变量通信服务和Activity

标签 android android-activity service

您好,我有一项服务正在运行并每 30 秒获取一次位置(如代码 (1) 中所示)我想存储位置以便随时可用 我的方法是在应用程序上下文中存储为全局变量(如代码(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();
 }

}

我的问题是这种方法有效吗?我看到它通常用于广播或绑定(bind)服务和 Activity ,我从未见过在服务和 Activity 之间共享全局变量,¿为什么?。

欢迎讨论。

最佳答案

您的方法是有效的。根据android developer site您有以下选择:

  • 将数据放入 Intent 中
  • 单例类
  • 公共(public)静态字段/方法
  • 对象的 HashMap 或 WeakReferences
  • 使用共享首选项
  • 放入数据库

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

关于android - 通过全局变量通信服务和Activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25281057/

相关文章:

android - 如何正确停止前台服务?

android - 是否可以在Honeycomb ActionBar的MenuItem中显示Text右侧的图标?

java - 使用按钮更改其他 Activity 的背景

java - 在 fragment 和 Activity 之间交换数据 - NullPointerException

Android:如何使用 BIND_AUTO_CREATE 选项停止由 bindService() 启动的服务?

安卓NFC启动服务

java - 仅混淆 Android 中的一个类文件

android - 从 Android WebView 获取 HTTPOnly Cookie

Android 等待浏览器 Intent 完成

angularjs - Angular 元数据服务 [$injector :unpr]