我可以拥有一个多进程全局变量吗?

时间:2011-12-26 21:05:27

标签: android variables process static global

我使用涉及2个进程的应用程序时遇到了实际问题。一个进程执行服务(p1),另一个进程执行GUI(p2)。

我在p2中有一个类,它实现了一个对象(iThing)的使用,它是自定义内存管理(及其静态)。它必须像Android操作系统的实现一样,只要他想要破坏视图。

public class Connections{
    public static int iGlobalCounter=0;
    public static Object iThing;

    public static void start(){
        iGlobalCounter++;
        Log.d("PROCESS", "UP: "+iGlobalCounter);
        if (iGlobalCounter<=1){
            //Create the object "iThing"
        }
    }

    public static int stop(){
        iGlobalCounter--;
        Log.d("PROCESS", "DOWN: "+iGlobalCounter);
        if (iGlobalCounter<=0){
            //Destroy the object "iThing"
        }
    }

}

主GUI(在p2中),启动和停止onCreate / onDestroy上的变量(对于我的应用中的所有视图)

public class MyMainClass extends Activity{
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Connections.start();
    }

    @Override
    public void onDestroy(){
        super.onDestroy();
        Connections.stop();
    }

}

最后在p1中我有了服务,它也需要变量,所以,它做同样的

public class MyMainService extends Service{
    @Override
    public void onCreate() {
        super.onCreate();
        Connections.start();
    }

    @Override
    public void onDestroy(){
        super.onDestroy();
        Connections.stop();
    }

}

问题是,如果我只使用p2(GUI),它会很顺利,但是当我执行服务时(在p1中),计数器不会从最后一个状态增加,而是从0增加,导致破坏离开服务时的对象,而不是应用程序。

如果进行此导航,我会得到以下计数器: MyMainClass(1) - &gt; OtherClass(2) - &gt; AnotherClass(3) - &gt; MyMainService 1

我的问题是,是否有一种拥有多进程全局变量的方法?因为似乎每个进程都有自己的静态变量而不是“真正的静态”。一个解决方案可能是使用SharedPreferences来保存状态,但不是很好的解决方案,因为它在离开应用程序时无法保存。

谢谢, PAU

3 个答案:

答案 0 :(得分:1)

我认为您应该延长Application课程并将globalVariable放在那里。

答案 1 :(得分:0)

您可以将全局数据存储在共享内存中(请参阅MemoryFile)。 为了同步对文件的访问,我认为最好的方法是使用相同的内存文件实现某种自旋锁。 在案例中,我不知道这样做的简单方法。

答案 2 :(得分:0)

您可以查看以下选项,以便在不同进程之间共享数据,

消息队列,

命名管道,

内存映射文件

命名管道或MSMQ上的WCF