2011-12-26 77 views
2

我有一个真正的问题,使用我的应用程序涉及2个进程。一个进程执行一个Service(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),计数器没有按” t从最后一个状态开始增加,但是从0开始增加,导致在离开服务时摧毁对象,而不是应用程序。

如果这样做导航,我得到以下计数器: MyMainClass(1) - > OtherClass(2) - > AnotherClass(3) - >MyMainService()

我问题是如果有一种多进程全局变量的方法?因为看起来每个进程都有自己的静态变量,并不是“真正的静态”。一个解决方案可以使用SharedPreferences来保存状态,但并不是很好的解决方案,因为在离开应用程序时它不会被保存。

感谢, PAU

回答

1

我认为你应该扩展Application类,并把你的globalVariable那里。

+0

对不起,我只是试过这个,但仍然发生相同的情况:两个进程,实例 – Corbella 2011-12-27 00:25:00

+0

也许在我们看到一个并发的例子。使应用程序类中的GlobalVariable变为静态并写入同步更新程序。 – Yury 2011-12-27 08:42:45

0

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

0

你有以下几种选择,你可以考虑为不同进程之间共享数据,

消息队列,

命名管道,

内存映射命名管道上的文件

WCF或MSMQ

相关问题