将onDestroy()服务中的变量传输到已打开的Main-Activity

时间:2012-02-24 05:40:00

标签: android variables service android-activity bundle

我有一个Main-Activity,它显示了几个微调器。 通过Main-Activity中的Toggle-Button,我启动了一项服务,该服务在后台收集GPS数据,测量距离并设置其他一些变量。 当我再次单击Main-Activity中的Toggle-Button停止服务时,我停止服务,因此onDestroy()命令在服务中执行。 在服务中的onDestroy中,我想将服务中的变量提交给已打开的Main-Activity。 到目前为止,我尝试过这项服务没有成功:

    Intent intent = new Intent(this, Main.class);
    Bundle b = new Bundle();
    Test = 2222;
    b.putInt("Test", Test);
    intent.putExtras(b);

我不使用" startActivity(intent);",导致数据发送到的活动已经打开...主要活动。

在主要活动方面:

    Bundle b = getIntent().getExtras();
    if (b != null){ 
       Test = b.getInt("Test");
    }
    else{
       //..oops!
       Toast.makeText(Main.this, "Oops...Nothing from service! :(", Toast.LENGTH_SHORT).show();
    }

我从来没有从服务中获取数据。 我正在尝试这个原因我需要从Main-Activity启动服务,从Main活动中用户停止服务并从中获取值,然后Main-Activity应该从服务AND和选定的微调器传输值价值从自身到另一项活动。

我现在尝试了几天,我也在这里找到了一些提示,但到目前为止我没有任何作用。 有人有什么想法吗? 我必须使用广播接收器吗? 什么是正确的方法?

3 个答案:

答案 0 :(得分:1)

在销毁服务存储之前,共享首选项中的数据并在主要活动中访问它

答案 1 :(得分:0)

我不知道这是否是最佳方式,但只是让您创建的服务更新静态pojo。如果活动已经打开,那么您可以设置一个计时器来轮询来自Activity的静态pojo,以查看是否通过AsyncTask更改了某些内容。当pojo中的某些内容更新后,AsyncTask可以告诉Activity相应地更新UI。然后你不必玩弄愚蠢的捆绑。此外,如果您担心数据丢失,您可以随时使用SQLite。希望这可以帮助。

答案 2 :(得分:0)

您需要在主要活动中使用广播接收器来获取数据。