在实时,singeltond模式上共享对象

时间:2012-08-25 23:38:57

标签: android

我根本没有找到在活动之间共享实时数据的解决方案。我的第一个活动接收实时对象(类型为double,随机数)。我想将这些数字传递给第二项活动。一切正常,只有第二个Activity只显示一次数据。我必须通过返回第一个活动来刷新活动,然后第二个活动才会显示最新数据。我实现了Singelton模式:

public class FirstActivity extends Activity{
 public double xAxis;
 public double yAxis;
 public static FirstView instance;

     public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.device_view);

        handler = new Handler() {
                @Override
                public void handleMessage(Message msg) {
                    int data1 = msg.arg1;
                    xAxis = (double) data1;
                    dataX.setText(String.valueOf(xAxis));
                    int data2 = msg.arg2;
                    yAxis = (double) data2;
                    dataY.setText(String.valueOf(yAxis));

                }
            };
        secondview.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent nextScreen = new Intent(getApplicationContext(),
                            SecondActivity.class);
                    startActivity(nextScreen);
                }
            });

    }

     public static void initInstance(){
    if(instance == null)
    {
       instance = new FirstActivity();
    }
     }

    public static FirstActivity getInstance(){
        return instance;
    }
}

SecondView类

public class SecondActivity extends Activity{
       private double valueX;
    private double valueY;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.linegraph); 
        valueX = FirstActivity.getInstance().xAxis;
        valueY = FirstActivity.getInstance().yAxis;
      }
}

申请类

package com.bluetoothcomm;

import android.app.Application;

public class MyApplication extends Application {

    @Override
    public void onCreate(){
        super.onCreate();
        initSingeltons();
    }

    public void initSingeltons(){
        FirstActivity.initInstance();
    }

}

4 个答案:

答案 0 :(得分:1)

您可以实现能够向Activity1和Activity2提供实时数据的后台服务。我猜你的问题是,如果你通过一个Intent与putExtras将数据从Activity1传递到Activity2,这样它只会在你启动Activity2的时候执行此操作。

答案 1 :(得分:1)

我发现了我的问题,解决方法是使用Application。只有这个剂量不能解决我的问题。问题是静态变量实例public static FirstView instance绑定到类加载器,这是第一个启动它的类。因此,当任何类中的静态变量已由Activity启动时,并且当第二个Activity启动时,第一个Activity将被销毁,因此这意味着静态变量也未被消毒。这就是为什么SecondActivity没有得到最新数据或实时数据,它只捕获静态常数数据。

我使用Singelton和Application的组合改变了我的代码,这样,当激活SecondActivity时,静态变量永远不会被消除。但是我仍然得到相同的结果,当我切换到第二个活动时,静态变量实例未被激活。我做错了,有人看到了吗。我添加了我的代码。

@Max Rasguido,@ Orabig

答案 2 :(得分:0)

您应该使用意图流程。 docs

答案 3 :(得分:0)

如果你说activity1收到你的数据,那么你的数据应该如何改变?

但是,我会使用您的应用程序类的首选项或属性(这是一个单例本身),但是您提供的信息太少,无法完全理解您的需求......